Este tópico responde a perguntas frequentes sobre a integração e o uso do Alibaba Cloud SDK for Node.js para aumentar sua eficiência no desenvolvimento.
Pré-requisitos
Node.js 8.x ou posterior instalado no ambiente de desenvolvimento.
As APIs da Alibaba Cloud acessíveis pela rede.
Visão geral
Perguntas e soluções
Como lidar com erros de AccessKey?
Problema: A seguinte mensagem de erro é retornada após a execução do código, indicando que o par de AccessKey não está configurado corretamente.
Alibaba Cloud SDK V2.0 for Node.js: Cannot read properties of undefined (reading 'getCredential').
Alibaba Cloud SDK V1.0 for Node.js: AssertionError [ERR_ASSERTION]: must pass "config.accessKeyId".
Soluções:
-
Execute os comandos abaixo para verificar se as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET estão configuradas.
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Se um par de AccessKey válido for retornado, as variáveis de ambiente estarão configuradas adequadamente. Caso nenhum par seja retornado ou ele seja inválido, configure as variáveis de ambiente conforme necessário. Para mais informações, consulte Configurar variáveis de ambiente no Linux, macOS e Windows.
-
Verifique se há erros relacionados ao par de AccessKey no código.
Exemplo de requisição com erro:
let config = new OpenApi.Config({ accessKeyId: process.env['yourAccessKeyID'], accessKeySecret: process.env['yourAccessKeySecret'], });Exemplo de requisição bem-sucedida:
let config = new OpenApi.Config({ accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], });NotaAs expressões
process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']eprocess.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']recuperam os valores das respectivas variáveis de ambiente.ImportantePara evitar riscos de segurança, não insira o par de AccessKey diretamente no código de produção.
O que fazer se a mensagem de erro "tsc: Fail to recognize the tsc command as the name of a cmdlet, a function, a script, or a executable program..." for retornada após executar um comando tsc?
PS C:\Users\issuser\Downloads\69351a7d-c9ef-417c-8986-a371cd208ece-TypeScript> tsc
tsc : The term 'tsc' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:1
+ tsc
+ ~~~
+ CategoryInfo : ObjectNotFound: (tsc:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Causas:
Variável de ambiente PATH mal configurada: o caminho do arquivo
tscinstalado globalmente não foi adicionado à variável de ambiente PATH.Política de execução do PowerShell: a política padrão pode estar definida como
Restricted, o que impede a execução de scripts.ps1.Configuração incorreta do PATH: o diretório de instalação global do
tsc, comoD:\node.js\node_global, não consta na variável de ambiente PATH.
Soluções:
-
Verifique se o
TypeScriptestá instalado globalmente:npm list -g typescriptSe a saída estiver vazia ou indicar que o TypeScript não está presente, a instalação não foi concluída corretamente.
Execute o comando
npm install -g typescriptpara instalar o TypeScript globalmente.-
Consulte o caminho de instalação global do
npmcom o seguinte comando:npm config get prefix # Sample output: D:\node.js\node_global -
Use o caminho retornado no comando abaixo para confirmar a existência do arquivo
tscno diretório:ls D:\node.js\node_global | Select-String 'tsc' -
Consulte a política de execução do
PowerShellexecutando:Get-ExecutionPolicyCaso a saída seja
Restricted, o PowerShell bloqueia a execução de scripts. -
Altere a política de execução para
RemoteSignedpara permitir a execução de scripts.Set-ExecutionPolicy RemoteSigned -Scope CurrentUserExecute novamente o comando
Get-ExecutionPolicypara consultar a política. A saída esperada éRemoteSigned. -
Defina a variável de ambiente PATH da sessão atual no terminal:
$env:Path += ";D:\node.js\node_global" -
Confirme se a variável de ambiente PATH contém o caminho global:
$env:Path -split ';' | Select-String 'node_global' Execute o comando
tscpara compilar o arquivo TypeScript.tsem um arquivo JavaScript.js, com base no arquivo de configuraçãotsconfig.json.
Substitua o caminho D:\node.js\node_global no exemplo pelo caminho real retornado pelo comando npm config get prefix.
O que fazer se a requisição de API expirar e a mensagem "Error: connect ETIMEDOUT" for retornada?
Causas comuns e soluções:
Vários fatores podem causar o tempo limite de uma chamada de API. A seção a seguir descreve as causas mais frequentes e suas respectivas soluções:
Causa 1: Problemas de conexão de rede
Causa: a requisição não alcança o servidor devido a falhas na conexão entre cliente e servidor ou instabilidade na rede.
Solução:
Use o comando ping ou curl para testar a conectividade entre o host local e o endpoint do serviço em nuvem. Por exemplo, execute ping dysmsapi.aliyuncs.com ou curl -v https://dysmsapi.aliyuncs.com para validar a conexão com o endpoint da API do Short Message Service (SMS).
Se o comando atingir o tempo limite ou não obtiver resposta, verifique as políticas de bloqueio no firewall local ou nos roteadores.
-
Havendo resposta, defina um período de tempo limite adequado para evitar falhas causadas por configurações impróprias. Para mais detalhes, consulte Configurar um período de tempo limite. Exemplo de código:
JavaScript
// Create a RuntimeOptions instance and specify runtime parameters. const runtime = new RuntimeOptions({ // Configure a timeout period for connection requests. connectTimeout: 10000, });TypeScript
// Create a RuntimeOptions instance and specify runtime parameters. const runtime = new $Util.RuntimeOptions({ // Configure a timeout period for connection requests. connectTimeout: 10000, });
Causa 2: Tempo prolongado para processamento da requisição
Descrição: a duração do processamento da requisição de API excede o tempo limite de leitura especificado.
Solução: ajuste o tempo limite para acomodar o maior tempo de resposta da API. Consulte Configurar um período de tempo limite para mais informações. Configure, por exemplo, o parâmetro de tempo limite de leitura para estender esse período. Exemplo de código:
JavaScript
// Create a RuntimeOptions instance and specify runtime parameters.
const runtime = new RuntimeOptions({
// Configure a timeout period for read requests.
readTimeout: 10000,
});
TypeScript
// Create a RuntimeOptions instance and specify runtime parameters.
const runtime = new $Util.RuntimeOptions({
// Configure a timeout period for read requests.
readTimeout: 10000,
});
O que fazer se o erro "MissingRequiredParameter" for reportado ao chamar uma operação de API?
Neste exemplo, a operação SendSms do serviço Short Message Service (SMS) é chamada.
Acesse a página API Debugging no OpenAPI Explorer e selecione o produto e a API desejados.
Verifique se todos os parâmetros obrigatórios, como phoneNumbers e signName, foram especificados no objeto de requisição construído. Neste exemplo, usa-se o objeto
SendSmsRequest.Valide se todos os parâmetros necessários constam na referência da API.
Certifique-se de que os valores dos parâmetros obrigatórios são válidos. Verifique, por exemplo, se os números de celular seguem formatos válidos.
Antes de enviar uma requisição, o SDK valida automaticamente os parâmetros. Se algum parâmetro obrigatório estiver ausente, um erro como
MissingRequiredParameterserá reportado. Por exemplo, se o parâmetro phoneNumbers não for especificado, o erro "MissingPhoneNumbers: code: 400" será exibido. Nesse caso, especifique o parâmetro conforme indicado na mensagem de erro.
JavaScript
let sendSmsRequest = new Dysmsapi20170525.SendSmsRequest({
phoneNumbers: '<YOUR_VALUE>',
signName: '<YOUR_VALUE>',
templateCode: '<YOUR_VALUE>',
});
TypeScript
let sendSmsRequest = new $Dysmsapi20170525.SendSmsRequest({
phoneNumbers: "<YOUR_VALUE>",
signName: "<YOUR_VALUE>",
templateCode: "<YOUR_VALUE>",
});
O que fazer se a chamada de API falhar porque a operação não é suportada na região especificada e a mensagem "getaddrinfo ENOTFOUND" for retornada?
Garanta que o serviço chamado esteja disponível na região selecionada. Encontre o endpoint correto do serviço no OpenAPI Explorer. Use sempre o endpoint correto.
Na barra de navegação superior do OpenAPI Explorer, selecione Short Message Service. Na página inicial do produto, acesse a aba Service area list. O formato do endpoint é [product_code].[region_id].aliyuncs.com. A tabela lista cada ID de região (como cn-beijing, cn-hangzhou e cn-shanghai) e seu endpoint de serviço correspondente (como dysmsapi.aliyuncs.com).
Como tratar os erros reportados pelo comando npm install?
Certifique-se de que o Node.js e o npm estejam instalados corretamente. Para mais informações, consulte Instalar o Node.js no Windows.
Possíveis causas:
Conflitos nas configurações de fonte de imagem: as configurações globais do npm usam uma fonte de terceiros, como Taobao, mas nenhuma fonte oficial independente foi configurada para o escopo
@alicloud.Problemas de cache ou rede corromperam o cache local do npm, ou políticas de rede, como firewalls corporativos, bloqueiam requisições à fonte de imagem.
A versão do pacote não existe: por exemplo, a versão especificada
3.1.1não está disponível na fonte de imagem.
Soluções:
-
Limpe o cache do npm para corrigir corrupções e reinstale o SDK executando o comando abaixo:
npm cache clean --force -
Use uma fonte oficial do npm.
-
Configure uma fonte oficial para o escopo
@alicloud. Execute o comando a seguir para definir uma fonte npm exclusiva para pacotes que começam com@alicloud.npm config set @alicloud:registry=https://registry.npmjs.org -
Verifique as configurações do npm e confirme se o escopo entrou em vigor:
npm config get @alicloud:registry # Expected output: https://registry.npmjs.org Execute o comando
npm install @alicloud/XXXpara instalar o Alibaba Cloud SDK.
-
-
Verifique a fonte de imagem da Alibaba Cloud. Execute o comando abaixo para alternar temporariamente para a fonte desejada (opcional):
# In this example, the SMS SDK is installed. npm install @alicloud/dysmsapi20170525@3.1.1 --registry=https://registry.npmmirror.com
Após a instalação do SDK, o npm pode retornar uma mensagem como 9 vulnerabilities (6 moderate, 3 high). Causa e solução:
Causa: um pacote de dependência de terceiros do SDK, como axios ou lodash, está desatualizado e contém uma vulnerabilidade conhecida.
Solução: execute o comando npm audit fix para iniciar a correção automática de erros. O npm atualizará automaticamente para uma versão compatível com menos vulnerabilidades ou nenhuma.
Como resolver um conflito de versão de um pacote de dependência?
Visualize a árvore de dependências com o comando
npm lspara garantir que não haja conflitos de versão.Exclua o diretório
node_modulese o arquivopackage-lock.jsone reinstale as dependências.
rm -rf node_modules package-lock.json
npm install
Lista de verificação de exceções básicas do Node.js
|
Mensagem de erro |
Possível causa |
Solução |
|
TypeError |
O tipo de uma variável ou expressão não corresponde ao esperado. |
Valide se o tipo da variável ou expressão está correto. Use instruções condicionais ou métodos de verificação de tipo, como typeof, para tratar essa exceção. |
|
SyntaxError |
A sintaxe do código é inválida. |
Confirme se a sintaxe do código está correta. Use um editor de código ou ferramenta de desenvolvimento para detectar e corrigir erros de sintaxe. |
|
ReferenceError |
A variável referenciada não existe. |
Assegure-se de que a variável a ser referenciada foi definida e inicializada. Use instruções condicionais ou mecanismos de tratamento de exceções para gerenciar esse erro. |
|
RangeError |
O valor especificado está fora do intervalo válido. Por exemplo, o índice do array excede o limite ou a função recursiva foi chamada vezes demais. |
Garanta que o valor especificado, como o índice do array ou a profundidade da recursão, esteja dentro do intervalo permitido. Trate essa exceção usando condicionais ou blocos de captura de erros. |
|
URIError |
A URI é inválida ou ocorreu um erro durante a codificação. |
Verifique se você usa uma URI válida ou se a codificação segue as especificações relevantes. Use métodos específicos de codificação de URI ou verificações condicionais para resolver esse problema. |
Suporte técnico
As soluções para os problemas anteriores ajudam a utilizar melhor os SDKs da Alibaba Cloud. Caso enfrente outras dificuldades, entre em contato com o suporte técnico da Alibaba Cloud pelo seguinte meio: