2015-07-21 2 views
1

запрос работает нормально, если я отправляю его с url с обязательными атрибутами в качестве первого параметра, но с ошибкой каждый раз при попытке отправить параметр параметров параметров, который содержит атрибуты запроса:Ошибка запроса 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 и тело, но это тоже не работает.

Спасибо за любую помощь

ответ

1

Это работает для меня, используя модуль 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"); 

тестировал против 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 
} 

(Docs: https://nodejs.org/api/http.html#http_http_request_options_callback)