2015-07-21 62 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

相关问题