Bu konu, geliştirme verimliliğinizi artırmanıza yardımcı olmak amacıyla Node.js için Alibaba Cloud SDK entegrasyonu ve kullanımıyla ilgili sık sorulan soruların yanıtlarını sunar.
Önkoşullar
Geliştirme ortamınızda Node.js 8.x veya sonraki bir sürüm yüklü olmalıdır.
Alibaba Cloud API uç noktalarına ağ üzerinden erişilebilir olmalıdır.
Genel Bakış
Sorular ve çözümler
AccessKey hatalarını nasıl gideririm?
Sorun: Kod çalıştırıldıktan sonra aşağıdaki hata mesajı döner. Bu mesaj, AccessKey çiftinin doğru yapılandırılmadığını gösterir.
Node.js için Alibaba Cloud SDK V2.0: Cannot read properties of undefined (reading 'getCredential').
Node.js için Alibaba Cloud SDK V1.0: AssertionError [ERR_ASSERTION]: must pass "config.accessKeyId".
Çözümler:
-
ALIBABA_CLOUD_ACCESS_KEY_ID ve ALIBABA_CLOUD_ACCESS_KEY_SECRET ortam değişkenlerinin yapılandırılıp yapılandırılmadığını denetlemek için aşağıdaki komutları çalıştırın.
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%Geçerli bir AccessKey çifti dönerse ortam değişkenleri doğru yapılandırılmış demektir. AccessKey çifti dönmezse veya geçersiz bir çift dönerse ortam değişkenlerini gerektiği gibi yapılandırın. Daha fazla bilgi için bkz. Linux, macOS ve Windows'ta ortam değişkenlerini yapılandırma.
-
Kodda AccessKey çiftiyle ilgili hataları denetleyin.
Örnek hatalı istek:
let config = new OpenApi.Config({ accessKeyId: process.env['yourAccessKeyID'], accessKeySecret: process.env['yourAccessKeySecret'], });Örnek başarılı istek:
let config = new OpenApi.Config({ accessKeyId: process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'], accessKeySecret: process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET'], });Notprocess.env['ALIBABA_CLOUD_ACCESS_KEY_ID']veprocess.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']ifadeleri, değerleri ilgili ortam değişkenlerinden alır.ÖnemliGüvenlik risklerini önlemek için AccessKey çiftini kod içine doğrudan yazmayın.
Bir tsc komutu çalıştırdıktan sonra "tsc: Fail to recognize the tsc command as the name of a cmdlet, a function, a script, or a executable program..." hata mesajı alırsam ne yapmalıyım?
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
Nedenler:
PATH ortam değişkeni yanlış yapılandırılmış: Genel olarak yüklenen
tscdosya yolu PATH ortam değişkenine eklenmemiş.PowerShell yürütme ilkesi: Varsayılan PowerShell yürütme ilkesi
Restrictedolarak ayarlanmış olabilir; bu durum.ps1betiklerinin çalıştırılmasını engeller.PATH ortam değişkeni yanlış yapılandırılmış: Genel olarak yüklenen
tscdosya yolu (örneğinD:\node.js\node_global) PATH ortam değişkenine eklenmemiş.
Çözümler:
-
TypeScriptpaketinin genel olarak yüklenip yüklenmediğini denetleyin:npm list -g typescriptÇıktı boşsa veya TypeScript'in yüklü olmadığını belirtiyorsa TypeScript doğru şekilde yüklenmemiştir.
TypeScript'i genel olarak yüklemek için
npm install -g typescriptkomutunu çalıştırın.-
npmgenel yükleme yolunu sorgulamak için aşağıdaki komutu çalıştırın:npm config get prefix # Sample output: D:\node.js\node_global -
Dönen yolu aşağıdaki komutta kullanarak
tscdosyasının dizinde var olup olmadığını denetleyin:ls D:\node.js\node_global | Select-String 'tsc' -
PowerShellyürütme ilkesini sorgulamak için aşağıdaki komutu çalıştırın:Get-ExecutionPolicyÇıktı
Restrictedise PowerShell betiklerin çalıştırılmasını engeller. -
Betik yürütmeye izin vermek için yürütme ilkesini
RemoteSignedolarak değiştirin.Set-ExecutionPolicy RemoteSigned -Scope CurrentUserYürütme ilkesini sorgulamak için
Get-ExecutionPolicykomutunu yeniden çalıştırın. Beklenen çıktıRemoteSignedolmalıdır. -
Terminalinizde geçerli oturumun PATH ortam değişkenini belirtin:
$env:Path += ";D:\node.js\node_global" -
PATH ortam değişkeninin genel yolu içerip içermediğini denetleyin:
$env:Path -split ';' | Select-String 'node_global' .tsTypeScript dosyasınıtsconfig.jsonyapılandırma dosyasına göre.jsJavaScript dosyasına derlemek içintsckomutunu çalıştırın.
Örnekteki D:\node.js\node_global yolunu, npm config get prefix komutunun döndürdüğü gerçek dosya yoluyla değiştirin.
API isteği zaman aşımına uğrar ve "Error: connect ETIMEDOUT" mesajı dönerse ne yapmalıyım?
Yaygın nedenler ve çözümler:
API çağrısı zaman aşımı birden çok faktörden kaynaklanabilir. Aşağıda yaygın nedenler ve karşılık gelen çözümler açıklanmıştır:
Neden 1: Ağ bağlantısı sorunları
Neden: İstemci ile sunucu arasındaki ağ bağlantısı kesildiği veya ağ kararsız olduğu için istek sunucuya ulaşamaz.
Çözüm:
Şirket içi ana bilgisayar ile cloud hizmetinin uç noktası arasındaki bağlantıyı test etmek için ping veya curl komutunu çalıştırın. Örneğin, şirket içi ana bilgisayarınız ile Short Message Service (SMS) API uç noktası arasındaki bağlantıyı test etmek için ping dysmsapi.aliyuncs.com veya curl -v https://dysmsapi.aliyuncs.com komutunu çalıştırın.
Komut zaman aşımına uğrar veya yanıt almazsa şirket içi güvenlik duvarınızda veya yönlendiricilerinizde engelleyici ilkeler olup olmadığını denetleyin.
-
Yanıt alınırsa istek hatalarını önlemek için uygun bir zaman aşımı süresi belirtmenizi öneririz. Daha fazla bilgi için bkz. Zaman aşımı süresi yapılandırma. Örnek kod:
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, });
Neden 2: İsteğin işlenmesinin uzun sürmesi
Açıklama: API isteğinin işlenme süresi belirtilen okuma zaman aşımı süresini aşar.
Çözüm: Uzun süren API yanıt sürelerine uyum sağlamak için zaman aşımı süresini yapılandırın. Daha fazla bilgi için bkz. Zaman aşımı süresi yapılandırma. Örneğin, okuma zaman aşımı süresini uzatmak için okuma zaman aşımı parametresini yapılandırabilirsiniz. Örnek kod:
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,
});
Bir API işlemi çağrılırken "MissingRequiredParameter" hatası alınırsa ne yapmalıyım?
Bu örnekte Short Message Service (SMS) hizmetinin SendSms işlemi çağrılır.
OpenAPI Explorer'daki API Hata Ayıklama sayfasına gidin, ardından ürünü ve API'yi seçin.
Oluşturulan istek nesnesinde phoneNumbers ve signName gibi tüm zorunlu parametrelerin belirtilip belirtilmediğini denetleyin. Bu örnekte
SendSmsRequestnesnesi kullanılır.API referansına göre tüm zorunlu parametrelerin belirtildiğini doğrulayın.
Zorunlu parametrelerin değerlerinin geçerli olduğundan emin olun. Örneğin, cep telefonu numaralarının geçerli biçimde belirtilip belirtilmediğini denetleyin.
SDK bir API isteği göndermeden önce parametreleri otomatik olarak doğrular. Bir veya daha fazla zorunlu parametre belirtilmezse
MissingRequiredParametergibi bir hata raporlanır. Örneğin, phoneNumbers parametresi belirtilmezse "MissingPhoneNumbers: code: 400" hatası döner. Bu durumda parametreyi hata mesajına göre belirtin.
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>",
});
Belirtilen bölgede işlem desteklenmediği için API çağrısı başarısız olur ve "getaddrinfo ENOTFOUND" mesajı dönerse ne yapmalıyım?
Çağırdığınız hizmetin seçilen bölgede kullanılabilir olduğundan emin olun. Doğru hizmet uç noktasını OpenAPI Explorer içinde bulabilirsiniz. Doğru uç noktayı kullandığınızdan emin olun.
OpenAPI Explorer'ın üst gezinme çubuğunda Short Message Service seçeneğini belirleyin. Ürün ana sayfasında Service area list sekmesine gidin. Uç nokta biçimi [product_code].[region_id].aliyuncs.com şeklindedir. Tabloda her bölge kimliği (örneğin cn-beijing, cn-hangzhou ve cn-shanghai) ve buna karşılık gelen hizmet uç noktası (örneğin dysmsapi.aliyuncs.com) listelenir.
npm install komutunun raporladığı hataları nasıl gideririm?
Node.js ve npm'nin doğru şekilde yüklendiğinden emin olun. Daha fazla bilgi için bkz. Windows'a Node.js yükleme.
Olası nedenler:
Kaynak yapılandırmalarında çakışma var. Genel npm yapılandırmaları Taobao gibi üçüncü taraf bir kaynak kullanıyor ancak
@alicloudkapsamı için bağımsız bir resmi kaynak yapılandırılmamış.Önbellek veya ağ sorunları npm yerel önbelleğinde hasara neden oluyor veya kurumsal güvenlik duvarları gibi ağ ilkeleri kaynağa yönelik istekleri engelliyor.
Paket sürümü mevcut değil. Örneğin, belirtilen
3.1.1sürümü kaynakta bulunmuyor.
Çözümler:
-
Önbellek hasarını düzeltmek için npm önbelleğini temizlemek ve SDK'yı yeniden yüklemek için aşağıdaki komutu çalıştırın.
npm cache clean --force -
Resmi bir npm kaynağı kullanın.
-
@alicloudkapsamı için resmi bir kaynak yapılandırın. Yalnızca@alicloudile başlayan paketler için bir npm kaynağı yapılandırmak üzere aşağıdaki komutu çalıştırın.npm config set @alicloud:registry=https://registry.npmjs.org -
npm yapılandırmalarını denetlemek ve kapsamın etkili olduğundan emin olmak için aşağıdaki komutu çalıştırın:
npm config get @alicloud:registry # Expected output: https://registry.npmjs.org Alibaba Cloud SDK'yı yüklemek için
npm install @alicloud/XXXkomutunu çalıştırın.
-
-
Alibaba Cloud kaynağını denetleyin. İstenen kaynağa geçici olarak geçiş yapmak için aşağıdaki komutu çalıştırın (isteğe bağlı):
# In this example, the SMS SDK is installed. npm install @alicloud/dysmsapi20170525@3.1.1 --registry=https://registry.npmmirror.com
SDK yüklendikten sonra npm, 9 vulnerabilities (6 moderate, 3 high) gibi bir mesaj döndürür. Neden ve çözüm:
Neden: SDK'nın axios veya lodash gibi üçüncü taraf bağımlılık paketleri eski sürümdedir ve bilinen bir güvenlik açığı içerir.
Çözüm: Otomatik hata düzeltmeyi başlatmak için npm audit fix komutunu çalıştırın. npm, daha az veya sıfır güvenlik açığı içeren uyumlu bir sürüme otomatik olarak yükseltme yapar.
Bağımlılık paketi sürüm çakışmasını nasıl çözerim?
Bağımlılık ağacını görüntülemek ve sürüm çakışması olmadığından emin olmak için
npm lskomutunu çalıştırın.node_modulesdizinini vepackage-lock.jsondosyasını silin ve bağımlılıkları yeniden yükleyin.
rm -rf node_modules package-lock.json
npm install
Temel Node.js istisnaları kontrol listesi
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Teknik destek
Yukarıdaki sorunlara yönelik çözümler, Alibaba Cloud SDK'larını daha iyi kullanmanıza yardımcı olur. Diğer sorunlarla karşılaşırsanız aşağıdaki yöntemi kullanarak Alibaba Cloud teknik desteğiyle iletişime geçebilirsiniz: