2015-07-21 53 views
1

要求工作正常,如果我的網址發送給它需要的屬性作爲第一個參數,但要發送的選項對象,其中包含請求參數時,每次都失敗屬性:Node.js的請求返回錯誤:連接ECONNREFUSED時設置選項參數

"use strict" 
var https = require('https'), 
    request = require('request'); 

var obj = { 
    translate: function(textToTranslate) { 
     var options = { 
      url: "https://translate.yandex.net/api/v1.5/tr.json/translate", 
      qs: { 
       key: process.env.TRANSLATION_APP_TOKEN, 
       lang: "en-ru", 
       text: textToTranslate 
      } 
     }, translationRequest = https.request(options, function(response) { 
      response.on('data', function (chunk) { 
       console.log(JSON.parse(chunk).text[0]); 
      }); 
     }); 
     console.log(options); 

     translationRequest.on('error', function (response) { 
      console.log(response); 
     }); 

     translationRequest.end(); 
    } 
}; 

obj.translate("hello"); 

我使用qs選項來傳遞參數,但嘗試過formData和body,但它不工作。

感謝您的幫助

回答

1

這對我的作品,使用的不是httpsrequest模塊(即你已經有了加載)。而根據the docs,你需要通過一個GET請求的查詢參數(POST這樣的表單數據將無法正常工作)來傳遞這些參數:

"use strict" 
var https = require('https'), 
    request = require('request'); 

var obj = { 
    translate: function(textToTranslate) { 
     var options = { 
      url: "https://translate.yandex.net/api/v1.5/tr.json/translate", 
      qs: { 
       key: "<redacted>", 
       lang: "en-ru", 
       text: textToTranslate 
      } 
     } 
     request.get(options, function(e, r, body) { 
      console.log(body); 
     }); 
    } 
}; 

obj.translate("hello"); 

測試它反對與有效的密鑰的API,並得到這個響應:

{"code":200,"lang":"en-ru","text":["привет"]} 

對於它的價值,就像你用optionshttps模塊做了它不工作的原因,是因爲這是專爲requesthttps語法。對於https工作,你需要遵循的模式:

options = { 
    hostname: "translate.yandex.net", 
    path: "/api/v1.5/tr.json/translate?key=" + process.env.TRANSLATION_APP_TOKEN + "&lang=en-ru&text=" + textToTranslate 
} 

(文檔:https://nodejs.org/api/http.html#http_http_request_options_callback

相關問題