node:url
O módulo node:url no Azion Runtime: análise e formatação de URLs, as APIs com suporte e exemplos de URL de requisição, query, validação e roteamento.
O módulo node:url fornece os utilitários do Node.js para resolver, analisar e formatar URLs. Com ele, uma function lê as partes de uma URL de forma estruturada, altera essas partes e constrói URLs para roteamento e requisições de API. O Azion Runtime oferece o módulo por meio da compatibilidade com Node.js. Uma function pode usá-lo para analisar a URL da requisição recebida, ler os parâmetros de query dela e construir URLs ao fazer proxy ou redirecionar tráfego. No Azion Runtime, url.URL é o mesmo objeto que o global URL, e as funções legadas url.parse(), url.format() e url.resolve() funcionam em uma function após o deploy.
Exemplos
Cada exemplo é uma function completa que importa url de node:url. A resposta abaixo de cada exemplo é a que uma function com deploy feito retorna.
Análise e formatação de URL
Esta function cria uma URL com a classe global URL, constrói uma string de URL a partir de um objeto com url.format() e analisa essa string com url.parse():
A function responde com Done!. Ela registra no log a URL, o aviso de API obsoleta que url.parse() exibe e o objeto analisado:
Análise da URL da requisição
Esta function lê os componentes da URL da requisição, reúne os parâmetros de query dela e divide o caminho em segmentos:
Para uma requisição GET para https://example.com/blog/post-1, a function responde com os componentes da URL, uma query vazia e os dois segmentos do caminho:
Construção dinâmica de URLs
Esta function constrói uma URL de API com parâmetros de query, uma URL de redirecionamento com url.format() e uma URL a partir das partes dela. Ela também resolve um caminho relativo duas vezes, com url.resolve() e com o construtor URL:
A function responde com as quatro URLs. As duas formas de resolver o caminho relativo registram no log https://example.com/api/reference, e a URL construída a partir das partes mantém a porta 443:
Manipulação de parâmetros de query
Esta function lê, verifica, altera e ordena os parâmetros de query da requisição e, em seguida, constrói uma segunda query string a partir de um objeto:
Para uma requisição sem query string, a function responde com os valores padrão, os parâmetros alterados e as duas query strings. O valor de timestamp vem de Date.now():
Validação e normalização de URL
Esta function verifica uma lista de URLs com o construtor URL e, em seguida, normaliza cada URL válida: ela converte o hostname para minúsculas e remove uma porta padrão:
A function responde com o resultado de cada URL e com a lista normalizada. O construtor URL rejeita not-a-url com a mensagem Invalid URL: 'not-a-url', e a lista normalizada contém null no lugar dela:
Roteamento de URL e correspondência de caminhos
Esta function compara o caminho da requisição com uma tabela de rotas, incluindo uma rota com um parâmetro :id, e verifica se a rota aceita o método da requisição. Ela responde 404 quando nenhuma rota corresponde e 405 quando uma rota corresponde, mas os métodos dela não incluem o método da requisição:
Para uma requisição GET para https://example.com/blog/post-1, um caminho que a tabela de rotas não lista, a function segue o ramo sem correspondência e responde com o status 404 e este corpo:
APIs com suporte
A tabela lista o status de cada API de node:url no Azion Runtime:
| API | Status |
|---|---|
URL (global) | 🟢 Com suporte |
URLSearchParams | 🟢 Com suporte |
url.URL | 🟢 Com suporte |
url.URLSearchParams | 🟢 Com suporte |
url.format() | 🟢 Com suporte |
url.parse() | 🟡 Com suporte (obsoleta, use new URL()) |
url.resolve() | 🟡 Com suporte (obsoleta, use new URL(relative, base)) |
url.domainToASCII() | 🟡 Suporte parcial |
url.domainToUnicode() | 🟡 Suporte parcial |
url.fileURLToPath() | 🟡 Suporte parcial |
url.pathToFileURL() | 🟡 Suporte parcial |
url.urlToHttpOptions() | 🟡 Suporte parcial |
As APIs marcadas como 🟡 Suporte parcial têm funcionalidade limitada em comparação com a implementação completa do Node.js. Em uma function após o deploy, url.fileURLToPath("file:///tmp/x.txt") retorna /tmp/x.txt, url.pathToFileURL("/tmp/x.txt") retorna file:///tmp/x.txt e url.domainToASCII("español.com") retorna xn--espaol-zwa.com.
Uma function que chama url.parse() pode registrar no log este aviso de API obsoleta, como mostra o primeiro exemplo:
O Node.js marca url.parse(), url.resolve() e url.format() como obsoletas a partir da v11.0.0. Use as APIs WHATWG URL e URLSearchParams em vez delas: no Azion Runtime, as duas são globais e não precisam de import.