如果我使用带有必需属性的 url 作为第一个参数发送请求,则请求工作正常,但每次尝试使用包含请求属性的选项对象参数发送时都会失败:
"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,但效果不佳。
感谢您的帮助
最佳答案
这对我有用,使用 request
模块(您已经加载)而不是 https
。并根据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");
使用有效 key 针对 API 进行测试,并得到以下响应:
{"code":200,"lang":"en-ru","text":["привет"]}
就其值(value)而言,它不像您使用 options
和 https
模块那样工作的原因是因为这是为请求
而不是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)
关于Node.js请求返回错误: connect ECONNREFUSED when set options parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31547397/