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

时间:2015-07-21 18:56:47

标签: node.js npm-request

如果我使用带有必需属性的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和body但是它也不起作用。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

这适用于我,使用request模块(您已经加载)而不是https。根据{{​​3}},您需要通过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":["привет"]}

对于它的价值,它不像options使用https模块那样工作的原因是因为这是语法专为request而非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
}

(文件:the docs