Utils
Funções da Azion Lib no pacote @aziontech/utils que servem arquivos de uma aplicação a partir de uma function e analisam uma requisição recebida.
O pacote @aziontech/utils é a biblioteca da Azion Lib de funções auxiliares para functions. Duas das funções dele respondem a uma requisição com um arquivo estático de uma single-page application (SPA) ou de uma multi-page application (MPA), e a terceira transforma uma requisição recebida em um objeto simples. As funções não fazem chamadas de API, não precisam de token e retornam o resultado diretamente.
Instale o pacote:
Importe as funções de @aziontech/utils/edge. A raiz do pacote exporta apenas dois objetos, edge e node, por isso import { mountSPA } from '@aziontech/utils' falha com um SyntaxError. Esta página não documenta a entrada node, @aziontech/utils/node.
mountSPA e mountMPA não rodam no Node.js, onde falham com TypeError: fetch failed, por isso os exemplos delas rodam dentro de uma function. parseRequest roda no Node.js e dentro de uma function. Os exemplos de function desta página são módulos JavaScript servidos localmente com o azion dev, e o exemplo de Node.js é um módulo ES em TypeScript que usa await de nível superior.
Arquivos estáticos no build
mountSPA e mountMPA leem arquivos por URLs file:///. Dentro de uma function, essas URLs apontam para os arquivos que a configuração build.memoryFS do azion.config.js incorpora ao build. Um arquivo que o build não incorpora não pode ser servido.
Os exemplos desta página usam um projeto cuja pasta data/ contém index.html, about/index.html e hello.txt. Adicione este bloco build ao objeto que o azion.config.mjs exporta, para que o build incorpore data/:
injectionDirs indica as pastas que o build incorpora. removePathPrefix remove o nome da pasta do caminho de cada arquivo, por isso data/index.html é lido em file:///index.html. Com removePathPrefix: './', o mesmo arquivo é lido em file:///data/index.html, e as funções mount* não o encontram.
mountSPA
Responde a uma requisição para uma single-page application com um arquivo do build. Um path sem extensão de arquivo, como /dashboard/settings, retorna index.html. Um path com extensão, como /hello.txt, retorna esse arquivo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
requestURL | string | Sim | A URL da requisição recebida, request.url. |
Retorna um Response que contém o arquivo. Quando o build não tem um arquivo para o path, a chamada lança um erro, Error: ENOENT: no such file or directory, e a function responde com status 500 e um body vazio.
Esta function responde a toda requisição com mountSPA e registra no log o path e o status:
Com a function servida localmente com azion dev, a raiz, uma rota, um arquivo e um arquivo inexistente retornam:
A function registra no log o status de cada requisição que ela responde e, em seguida, o erro que o arquivo inexistente gera:
mountMPA
Responde a uma requisição para uma multi-page application com um arquivo do build. Um path sem extensão de arquivo retorna o index.html da pasta que o path indica: /about e /about/ retornam about/index.html, e / retorna index.html. Um path com extensão, como /hello.txt, retorna esse arquivo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
requestURL | string | Sim | A URL da requisição recebida, request.url. |
Retorna um Response que contém o arquivo.
Esta function responde a toda requisição com mountMPA e registra no log o path e o status:
Com a function servida localmente com azion dev, a raiz, uma página com e sem barra final e um arquivo retornam:
parseRequest
Lê uma requisição recebida e retorna o método, as partes da URL, os headers, os cookies, o body e os dados do cliente dela em um único objeto simples.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
request | AzionRuntimeRequest | Sim | A requisição recebida. Passe a própria requisição, não o fetch event. O tipo vem do pacote Types. |
Retorna a requisição analisada. O pacote declara o tipo ParsedRequest, mas não o exporta, por isso deixe o TypeScript inferir o tipo do resultado. O resultado contém estas propriedades:
| Propriedade | Tipo | Descrição |
|---|---|---|
timestamp | string | O horário da chamada, no formato ISO 8601. |
method | string | O método HTTP. |
url | object | As partes da URL: full, protocol, hostname, path e query, um objeto com os parâmetros de query. |
headers | Record<string, string> | Todos os headers da requisição, com nomes em minúsculas. |
cookies | Record<string, string> | Os cookies do header Cookie, por nome. |
body | string | null | O body da requisição como texto. |
client | object | ip, o endereço IP do cliente, e userAgent, o header User-Agent. |
referer, origin, cacheControl, pragma, contentType, contentLength, acceptLanguage, acceptEncoding, priority, host | string | O valor do header de requisição correspondente, ou Unknown quando a requisição não o contém. |
authorization | string | Not Present quando a requisição não tem header Authorization. |
metadata | AzionRuntimeRequestMetadata | Declarado pelo tipo. O resultado de uma chamada local não tem a chave metadata. |
O exemplo em TypeScript importa AzionRuntimeRequest de @aziontech/types, por isso instale também esse pacote com npm install @aziontech/types. Este exemplo monta uma requisição POST manualmente e imprime quatro propriedades do resultado:
Saída:
Dentro de uma function, passe a requisição recebida. Esta function retorna o resultado inteiro como JSON:
Com a function servida localmente com azion dev, uma requisição POST com um cookie e um body JSON retorna o resultado abaixo. Localmente, client.ip é Unknown e o resultado não tem a chave metadata, porque o runtime local não tem request.metadata.