Este tema proporciona respuestas a algunas preguntas frecuentes sobre la integración y el uso de Alibaba Cloud SDK for Node.js para ayudarle a mejorar la eficiencia de desarrollo.
Requisitos previos
Node.js 8.x o posterior está instalado en su entorno de desarrollo.
Las API de Alibaba Cloud están accesibles a través de su red.
Descripción general
What do I do if the API request times out and the "Error: connect ETIMEDOUT" message is returned?
What do I do if the "MissingRequiredParameter" message is returned when I call an API operation?
How do I handle the errors reported by the npm install command?
How do I resolve a version conflict of a dependency package?
Preguntas y soluciones
¿Cómo se manejan los errores de AccessKey?
Problema: Después de ejecutar el código, se devuelve el mensaje de error a continuación. El mensaje de error indica que el par de AccessKey no está configurado correctamente.
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".
Soluciones:
-
Ejecute los comandos a continuación para comprobar si las variables de entorno ALIBABA_CLOUD_ACCESS_KEY_ID y ALIBABA_CLOUD_ACCESS_KEY_SECRET están 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%Si se devuelve un par de AccessKey válido, las variables de entorno están configuradas correctamente. Si no se devuelve ningún par de AccessKey o se devuelve un par de AccessKey no válido, configure las variables de entorno según corresponda. Para obtener más información, consulte Configure environment variables in Linux, macOS, and Windows.
-
Compruebe si hay errores relacionados con el par de AccessKey en el código.
Ejemplo de solicitud con error:
let config = new OpenApi.Config({ accessKeyId: process.env['yourAccessKeyID'], accessKeySecret: process.env['yourAccessKeySecret'], });Ejemplo de solicitud correcta:
let config = new OpenApi.Config({ accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], });NotaLas expresiones
process.env['ALIBABA_CLOUD_ACCESS_KEY_ID']yprocess.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']recuperan los valores de sus respectivas variables de entorno.ImportantePara evitar riesgos de seguridad, no escriba el par de AccessKey en el código en línea.
¿Qué hago si se devuelve el mensaje de error "tsc: Fail to recognize the tsc command as the name of a cmdlet, a function, a script, or a executable program..." después de ejecutar un 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:
La variable de entorno PATH no está configurada correctamente: la ruta del archivo
tscinstalado globalmente no está agregada a la variable de entorno PATH.Directiva de ejecución de PowerShell: la directiva de ejecución predeterminada de PowerShell puede estar establecida en
Restricted, lo que prohíbe ejecutar scripts.ps1.La variable de entorno PATH no está configurada correctamente: la ruta del archivo
tscinstalado globalmente, comoD:\node.js\node_global, no está agregada a la variable de entorno PATH.
Soluciones:
-
Compruebe si
TypeScriptestá instalado globalmente:npm list -g typescriptSi la salida está vacía o indica que TypeScript no está instalado, TypeScript no está instalado correctamente.
Ejecute el comando
npm install -g typescriptpara instalar TypeScript globalmente.-
Ejecute el comando a continuación para consultar la ruta de instalación global de
npm:npm config get prefix # Sample output: D:\node.js\node_global -
Incluya la ruta devuelta en el comando a continuación para comprobar si el archivo
tscexiste en el directorio:ls D:\node.js\node_global | Select-String 'tsc' -
Ejecute el comando a continuación para consultar la directiva de ejecución de
PowerShell:Get-ExecutionPolicySi la salida es
Restricted, PowerShell prohíbe ejecutar scripts. -
Cambie la directiva de ejecución a
RemoteSignedpara permitir la ejecución de scripts.Set-ExecutionPolicy RemoteSigned -Scope CurrentUserEjecute nuevamente el comando
Get-ExecutionPolicypara consultar la directiva de ejecución. La salida esperada esRemoteSigned. -
Especifique la variable de entorno PATH de la sesión actual en su terminal:
$env:Path += ";D:\node.js\node_global" -
Compruebe si la variable de entorno PATH contiene la ruta global:
$env:Path -split ';' | Select-String 'node_global' Ejecute el comando
tscpara compilar el archivo TypeScript.tsa un archivo JavaScript.jssegún el archivo de configuracióntsconfig.json.
Reemplace la ruta D:\node.js\node_global del ejemplo con la ruta de archivo real devuelta por el comando npm config get prefix.
¿Qué hago si la solicitud de API agota el tiempo de espera y se devuelve el mensaje "Error: connect ETIMEDOUT"?
Causas y soluciones comunes:
El agotamiento del tiempo de espera de una llamada de API puede deberse a varios factores. La sección a continuación describe las causas comunes y las soluciones correspondientes:
Causa 1: Problemas de conexión de red
Causa: la solicitud no puede llegar al servidor porque la conexión de red entre el cliente y el servidor falla o la red es inestable.
Solución:
Ejecute el comando ping o curl para probar la conectividad entre el host local y el endpoint del servicio en la nube. Por ejemplo, ejecute el comando ping dysmsapi.aliyuncs.com o curl -v https://dysmsapi.aliyuncs.com para probar la conectividad entre su host local y el endpoint de la API de Short Message Service (SMS).
Si el comando agota el tiempo de espera o no recibe respuesta, compruebe las políticas de bloqueo en su firewall local o en sus enrutadores.
-
Si se devuelve una respuesta, se recomienda que especifique un período de tiempo de espera adecuado para evitar errores de solicitud causados por configuraciones de tiempo de espera inadecuadas. Para obtener más información, consulte Configure a timeout period. Código de ejemplo:
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: Tiempo prolongado para procesar la solicitud
Descripción: la duración del procesamiento de la solicitud de API excede el período de tiempo de espera de lectura especificado.
Solución: configure el período de tiempo de espera para adaptarlo al tiempo de respuesta prolongado de la API. Para obtener más información, consulte Configure a timeout period. Por ejemplo, puede configurar el parámetro de tiempo de espera de lectura para ampliar el período de tiempo de espera de lectura. Código de ejemplo:
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,
});
¿Qué hago si se informa el error "MissingRequiredParameter" al llamar a una operación de API?
En este ejemplo, se llama a la operación SendSms del servicio Short Message Service (SMS).
Vaya a la página API Debugging en OpenAPI Explorer y luego seleccione el producto y la API.
Compruebe que todos los parámetros obligatorios, como phoneNumbers y signName, estén especificados en el objeto de solicitud construido. En este ejemplo, se usa el objeto
SendSmsRequest.Compruebe que todos los parámetros obligatorios estén especificados según la referencia de API.
Asegúrese de que los valores de los parámetros obligatorios sean válidos. Por ejemplo, compruebe que los números de celular estén especificados en formatos válidos.
Antes de enviar una solicitud de API, el SDK comprueba automáticamente los parámetros. Si uno o más parámetros obligatorios no están especificados, se informa un error como
MissingRequiredParameter. Por ejemplo, si el parámetro phoneNumbers no está especificado, se informa el error "MissingPhoneNumbers: code: 400". En este caso, especifique el parámetro según el mensaje de error.
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>",
});
¿Qué hago si no puedo llamar a una operación de API porque la operación no es compatible en la región especificada y se devuelve el mensaje "getaddrinfo ENOTFOUND"?
Asegúrese de que el servicio al que está llamando esté disponible en la región seleccionada. Puede encontrar el endpoint de servicio correcto en OpenAPI Explorer. Asegúrese de usar el endpoint correcto.
En la barra de navegación superior de OpenAPI Explorer, seleccione Short Message Service. En la página principal del producto, vaya a la pestaña Service area list. El formato del endpoint es [product_code].[region_id].aliyuncs.com. La tabla enumera cada ID de región (como cn-beijing, cn-hangzhou y cn-shanghai) y su endpoint de servicio correspondiente (como dysmsapi.aliyuncs.com).
¿Cómo se manejan los errores informados por el comando npm install?
Asegúrese de que Node.js y npm estén instalados correctamente. Para obtener más información, consulte Install Node.js on Windows.
Causas posibles:
Las configuraciones de origen de imagen contienen conflictos. Las configuraciones globales de npm usan un origen de imagen de terceros, como Taobao, pero no se ha configurado un origen oficial independiente para el ámbito
@alicloud.Los problemas de caché o de red dañan la caché local de npm, o las políticas de red, como los firewalls empresariales, bloquean las solicitudes al origen de imagen.
La versión del paquete no existe. Por ejemplo, la versión especificada
3.1.1no existe en el origen de imagen.
Soluciones:
-
Ejecute el comando a continuación para limpiar la caché de npm y corregir daños en la caché; después reinstale el SDK.
npm cache clean --force -
Use un origen oficial de npm.
-
Configure un origen oficial para el ámbito
@alicloud. Ejecute el comando a continuación para configurar un origen de npm solo para los paquetes que comienzan con@alicloud.npm config set @alicloud:registry=https://registry.npmjs.org -
Ejecute el comando a continuación para comprobar las configuraciones de npm y asegúrese de que el ámbito surta efecto:
npm config get @alicloud:registry # Expected output: https://registry.npmjs.org Ejecute el comando
npm install @alicloud/XXXpara instalar Alibaba Cloud SDK.
-
-
Compruebe el origen de imagen de Alibaba Cloud. Ejecute el comando a continuación para cambiar temporalmente al origen de imagen deseado (opcional):
# In this example, the SMS SDK is installed. npm install @alicloud/dysmsapi20170525@3.1.1 --registry=https://registry.npmmirror.com
Después de instalar el SDK, npm devuelve un mensaje, como 9 vulnerabilities (6 moderate, 3 high). Causa y solución:
Causa: el paquete de dependencias de terceros del SDK, como axios o lodash, está desactualizado y contiene una vulnerabilidad conocida.
Solución: ejecute el comando npm audit fix para iniciar la corrección automática de errores. npm actualiza automáticamente a una versión compatible que contiene menos vulnerabilidades o ninguna.
¿Cómo resuelvo un conflicto de versiones de un paquete de dependencias?
Ejecute el comando
npm lspara consultar el árbol de dependencias y asegurarse de que no haya conflictos de versiones.Elimine el directorio
node_modulesy el archivopackage-lock.jsony reinstale las dependencias.
rm -rf node_modules package-lock.json
npm install
Lista de verificación de excepciones básicas de Node.js
|
Mensaje de error |
Causa posible |
Solución |
|
TypeError |
El tipo de una variable o expresión no cumple la expectativa. |
Compruebe que el tipo de la variable o expresión sea el esperado. Puede usar sentencias condicionales o un método de comprobación de tipos, como type of, para manejar esta excepción. |
|
SyntaxError |
La sintaxis del código no es válida. |
Compruebe que la sintaxis del código sea correcta. Puede usar el editor de código o una herramienta de desarrollo para detectar y corregir errores de sintaxis. |
|
ReferenceError |
La variable referenciada no existe. |
Asegúrese de que la variable que desea referenciar esté definida e inicializada. Puede usar sentencias condicionales o un mecanismo de manejo de excepciones para manejar esta excepción. |
|
RangeError |
El valor especificado está fuera del rango válido. Por ejemplo, el índice de matriz está fuera del rango o la función recursiva se llama demasiadas veces. |
Asegúrese de que el valor especificado, como el índice de matriz o la profundidad de la función recursiva, esté dentro del rango válido. Puede usar sentencias condicionales o un mecanismo de manejo de excepciones para manejar esta excepción. |
|
URIError |
El URI no es válido o se produce un error durante la codificación. |
Asegúrese de usar un URI válido o de que la codificación se realice siguiendo las especificaciones pertinentes. Puede usar sentencias condicionales o un método de codificación de URI específico para manejar esta excepción. |
Soporte técnico
Las soluciones a los problemas anteriores pueden ayudarle a usar mejor los SDK de Alibaba Cloud. Si encuentra otros problemas, puede comunicarse con el soporte técnico de Alibaba Cloud mediante el método a continuación: