Node.js请求返回错误:设置选项参数时连接ECONNREFUSED

请求工作正常,如果我发送带有必要属性的url作为第一个参数,但每次尝试发送包含请求属性的options对象参数时都失败:

"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和正文,但它不工作。

感谢您的任何帮助

这适用于我,使用request模块(你已经加载),而不是https 。 根据文档 ,您需要通过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进行testing,得到以下回应:

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

对于什么是值得的,它不工作的原因就像你用https模块的options做的那样,是因为这是为request而devise的语法而不是https 。 为了使用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 )