Crie sua primeira função sem servidor no HubSpot CMS e obtenha uma resposta.
‘Crie sua primeira função sem servidor no HubSpot CMS e obtenha uma resposta.’;As funções sem servidor fornecem uma maneira de executar o JavaScript através da HubSpot no lado do servidor, impedindo que ele seja exposto ao cliente. Isso pode ser especialmente importante para fazer solicitações de API que contêm informações confidenciais, como um Chave de API ou outras credenciais. Quando a função é invocada, a HubSpot executa a função em seu back-end, o que também significa que você não precisa fornecer seus próprios servidores back-end para fazer solicitações para seu site CMS. As funções sem servidor da HubSpot usam o tempo de execução do NodeJS.Neste guia, você criará uma função simples sem servidor que obtém um menção de um serviço de terceiros e exibirá esse menção em um página do site. Para construir e implantar a função sem servidor em sua conta, você usará um projeto de desenvolvedor HubSpot.Para uma visão geral de alto nível das funções sem servidor, consulte a visão geral das funções sem servidor. Você também pode verificar o Canal do YouTube dos desenvolvedores do HubSpot para um passo a passo da utilização de funções sem servidor em um projeto CMS.
O CLI da HubSpot (recomenda-se a versão mais recente), que precisará ser instalada e autenticada com a conta que você está usando. Para verificar quais contas são autenticadas, você pode executar hs accounts list. Saiba mais sobre introdução ao desenvolvimento local.
Depois que o projeto tiver sido criado, abra-o no editor de sua preferência, como Código VS. A HubSpot terá criado automaticamente um diretório de projeto com um diretório vazio src e um arquivo de configuração hsproject.json. Para adicionar uma função sem servidor ao projeto, crie um diretório app dentro do diretório src e adicione os seguintes diretórios e arquivos dentro dele:
app/app.json: o arquivo de configuração do aplicativo.
app/app.functions: o diretório da função sem servidor. Você pode usar qualquer nome desejado, desde que termine em .functions.
app/app.functions/function.js: o código JavaScript que será executado quando a função for chamada.
app/app.functions/serverless.json: o arquivo de configuração da função sem servidor.
app/app.functions/package.json: inclui as dependências necessárias.
Copie o código de exemplo abaixo para o seus respectivos arquivos locais app.json, function.js, serverless.json e package.json. Em cada bloco de código .json, você também encontrará uma tabela contendo definições de campo.
app.json
function.js
serverless.json
package.json
Reportar código incorreto
Copiar
Perguntar à IA
{ "name": "Serverless function app", "description": "This app runs a serverless function to fetch a quote using the Zen Quotes API.", "scopes": ["crm.objects.contacts.read", "crm.objects.contacts.write"], "uid": "serverless-function-app", "public": false}
Campo
Tipo
Descrição
name
String
O nome do aplicativo, que será exibido na interface do usuário da HubSpot.
description
String
A descrição do aplicativo, que será exibida na interface do usuário da HubSpot.
scopes
Matriz
Os escopos aos quais o aplicativo tem acesso para solicitações de autenticação com o token de acesso do aplicativo privado. Os dois escopos acima são os escopos mínimos necessários. Nenhum escopo adicional foi adicionado a este tutorial, pois você não precisará usar o token de acesso de aplicativo privado para a solicitação que você fará.
uid
String
O identificador exclusivo do aplicativo. Isso pode ser qualquer string, mas deve identificar significativamente o aplicativo. A HubSpot identificará o aplicativo por esta ID para que você possa alterar o name do app localmente ou na HubSpot sem remover dados históricos ou de estado, como logs.
const axios = require("axios");exports.main = async context => { try { // Make GET request to the ZenQuotes API const response = await axios.get("https://zenquotes.io/api/random"); // Extract the quote data (first item in the array) const quoteData = response.data[0]; // Log the quote and author to console console.log(`"${quoteData.q}" — ${quoteData.a}`); // Return a properly formatted response with status code and body return { statusCode: 200, body: quoteData, headers: { "Content-Type": "application/json", }, }; } catch (error) { // Handle any errors that occur during the request console.error("Error fetching quote:", error.message); // Return an error response return { statusCode: 500, body: { error: "Failed to fetch quote" }, headers: { "Content-Type": "application/json", }, }; }};
Um objeto contendo os detalhes de configuração da função sem servidor. Este objeto pode ter qualquer nome, mas ele deve corresponder ao nome de campo associado que você mencionou na appFunctions no seu arquivo serverless.json.
file
String
O nome do arquivo JavaScript que contém o código de função sem servidor a ser executado.
secrets
Matriz
Uma matriz que contém nomes de segredos que a função usará para autenticar solicitações. Para este tutorial, nenhum segredo é necessário.
endpoint
Objeto
Um objeto contendo detalhes sobre o endpoint que você pode pressionar para chamar a função. O campo path define o último valor no caminho do endpoint /hs/serverless/<path>, enquanto o method define o método de solicitação.
Com as alterações salvas, você pode carregar o projeto na HubSpot para compilar e implantar o aplicativo e a função sem servidor.
No terminal, execute hs project upload.
Reportar código incorreto
Copiar
Perguntar à IA
hs project upload
Confirme se deseja criar o projeto na conta. Você não precisará confirmar novamente isso após a criação inicial. O terminal exibirá o status atual das etapas de compilação e implantação à medida que avançarem.
Quando o upload for concluído, execute hs project open para exibir o projeto na HubSpot.
Reportar código incorreto
Copiar
Perguntar à IA
hs project open
Na HubSpot, você pode exibir os detalhes do projeto, criar e implantar logs, logs de funções sem servidor, gerenciar o projeto e o aplicativo e muito mais. Saiba mais sobre como gerenciar projetos na HubSpot.
Com a função sem servidor implantada, você pode chamá-la acessando seu URL público. As funções sem servidor construídas com projetos de desenvolvedor têm a seguinte estrutura de URL pública: https://<domain>/hs/serverless/<endpoint-path-from-config>.
<domain>: você pode usar qualquer domínio conectado à conta. Por exemplo, se website.com e subdomain.brand.com estiverem conectados à conta, você poderá chamar a função usando https://website.com/hs/serverless/<path> ou https://subdomain.brand.com/hs/serverless/<path>.
<endpoint-path-from-config>: o valor no campo path em serverless.json.
Com base no código de exemplo fornecido neste tutorial, o URL público para chamar a função será: https://<domain>/hs/serverless/fetch-quote.Para exibir a saída da função, navegue até esse URL no navegador, substituindo o domínio por um dos domínios hospedados na HubSpot. Se você não conectou um domínio personalizado, poderá usar um dos domínios padrão fornecidos pela HubSpot: <hubId>.hs-sites.com (por exemplo, 123456.hs-sites.com). Seu navegador deve exibir os dados retornados pela API Zen Quotes.
Agora que você criou a função sem servidor e confirmou que ela retorna dados, implemente-a em uma página para ver os dados retornados em um contexto mais realista. Para este tutorial, você criará um modelo de página contendo alguns JavaScript e HTML personalizados para executar a função e exibir os dados de resposta.Primeiro, crie um novo modelo de página:
No ambiente local, crie um novo diretório para conter o modelo de página. Para os propósitos deste tutorial, crie este diretório fora do diretório do projeto criado por hs project create.
No terminal, navegue até esse diretório usando o comando cd.
Reportar código incorreto
Copiar
Perguntar à IA
cd Documents/Dev/serverless-page
Execute hs create template "serverless-template" para criar um novo modelo chamado serverless-template.
Reportar código incorreto
Copiar
Perguntar à IA
hs create template "serverless-template"
Selecione o tipo de modelo da página.
Abra o arquivo de modelo de página recém-criado no editor e substitua o código de formatação pelo código abaixo. Certifique-se de substituir <domain> no URL do endpoint da função (fetch('http://<domain>/hs/serverless/fetch-quote')) com um domínio conectado à sua conta HubSpot.
Reportar código incorreto
Copiar
Perguntar à IA
<!-- templateType: page label: Serverless function example template isAvailableForNewContent: true--><!doctype html><html> <head> <meta charset="utf-8" /> <title>{{ content.html_title }}</title> <meta name="description" content="{{ content.meta_description }}" /> {{ standard_header_includes }} </head> <body> {% module "page_template_logo" path="@hubspot/logo" label="Logo" %} <!-- Button to fetch quote via serverless function --> <div class="serverless-container"> <h2>Get quote</h2> <p class="subtitle">Click the button to fetch and display a quote.</p> <button id="data-button" type="button">Get quote!</button> <div id="data-container"> <p class="data"></p> </div> </div> <!-- End button section --> {{ standard_footer_includes }} <!-- JavaScript that invokes the serverless function and adds returned data into the "data" text element --> <script> const dataButton = document.getElementById("data-button"); const dataContainer = document.getElementById("data-container"); dataButton.addEventListener("click", function (e) { console.log("Button clicked!"); // Show loading state dataContainer.innerText = "Loading..."; // Replace <domain> with your own domain fetch("http://<domain>/hs/serverless/fetch-quote") .then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } // Parse the JSON response return response.json(); }) .then(data => { console.log("Raw data received:", data); // Clear container dataContainer.innerText = ""; // Create the paragraph element const newDataElement = document.createElement("p"); newDataElement.innerText = `"${data.q}" — ${data.a}`; dataContainer.appendChild(newDataElement); }); }); </script> </body></html>
Salve o arquivo e execute hs upload para carregá-lo na HubSpot. Siga os prompts de terminal para selecionar o caminho local de origem e destino. Para este tutorial, você pode apenas pressionar Inserir para cada prompt para usar os caminhos padrão.
Em seguida, crie uma nova página a partir do modelo na HubSpot.
Navegue até o página do site da sua conta HubSpot executando o hs open website-pages.
Reportar código incorreto
Copiar
Perguntar à IA
hs open website-pages
No navegador, clique em Criar no canto superior direito para criar uma nova página.
Na caixa de diálogo, selecione um domínio para usar, depois atribua um Nome da página. O domínio da página precisará corresponder ao domínio que você está usando para chamar a função sem servidor para evitar erros de origem cruzada (CORS). Você pode selecionar esse domínio no menu suspenso ou atualizar o URL do endpointno código de modelo de página (fetch('http://<domain>/hs/serverless/fetch-quote')) para usar o domínio selecionado nesta etapa.
Clique em Criar página.
Na tela de seleção de modelo, procure o novo modelo. Você pode usar o rótulo ou o nome do arquivo para pesquisar o modelo (por exemplo, “Página de exemplo da função sem servidor”). O modelo aparecerá em Outros modelos, pois não faz parte de um tema.
Clique em Selecionar modelo.
No editor de página, clique em Visualizar na parte superior direita.
Clique em Abrir em uma nova guia.
Na nova guia, você agora deve ser capaz de clicar no botão para buscar e exibir cotações.
Agora que você criou e implementou uma função sem servidor que interage com uma API de terceiros, há algumas maneiras de continuar aumentando o uso da função sem servidor, como:
Implementar o botão e o código JavaScript em um módulo em vez de inseri-los no modelo de página. Isso lhe daria uma opção mais portátil, permitindo que a função fosse chamada de qualquer página à qual o módulo fosse adicionado. Para fazer isso, crie um módulo e adicione o HTML ao module.html e o JavaScript no arquivo module.js.
module.html
module.js
Reportar código incorreto
Copiar
Perguntar à IA
<div class="serverless-container"> <h2>Get quote</h2> <p class="subtitle">Click the button to fetch and display a quote.</p> <button id="data-button" type="button">Get quote!</button> <div id="data-container"> <p class="data"></p> </div></div>
Reportar código incorreto
Copiar
Perguntar à IA
const dataButton = document.getElementById("data-button");const dataContainer = document.getElementById("data-container");dataButton.addEventListener("click", function (e) { console.log("Button clicked!"); // Show loading state dataContainer.innerText = "Loading..."; fetch("http://meowmix-2272014.hs-sites.com/hs/serverless/fetch-quote") .then(response => { if (!response.ok) { throw new Error(`HTTP error! Status: ${response.status}`); } // Parse the JSON response return response.json(); }) .then(data => { console.log("Raw data received:", data); // Clear container dataContainer.innerText = ""; // Create the paragraph element const newDataElement = document.createElement("p"); newDataElement.innerText = `"${data.q}" — ${data.a}`; dataContainer.appendChild(newDataElement); });});