Почему мой ExpressJS не может правильно выполнить команду запроса? - PullRequest
0 голосов
/ 12 сентября 2011
  searchJSON = {
    location: 'NYC',
    text: text,
    authID: apiKey
  };
  searchRequest = {
    host: siteUrl,
    port: 80,
    path: '/search',
    method: 'GET'
  };
searchResponse = makeRequest(searchRequest, searchJSON);
makeRequest = function(options, data) {
  var req;
  if (typeof data !== 'string') {
    data = JSON.stringify(data);
  }
  req = http.get(options, function(res) {
    var body;
    body = '';
    res.on('data', function(chunk) {
      body += chunk;
    });
    return res.on('end', function() {
      console.log(body);
    });
  });
  console.log(data);
  req.write(data);
  req.end();
};

Разве это не должно переводиться на http://www.somesite.com/search?location=NYC&text=text&authID=[mykey]?

1 Ответ

1 голос
/ 12 сентября 2011

В этом коде довольно много ошибок, из-за которых становится ясно, что вам необходимо проанализировать, как работает асинхронный поток кода.Вы вызываете makeRequest до того, как он определен, и вы пытаетесь вернуть значение из вашего ответного обратного вызова в http.get, которое не будет работать.Вам также не хватает ключевых слов 'var'.

Основная проблема, которую я вижу помимо этого, заключается в том, что вы передаете свои аргументы URL в теле запроса, что не будет работать.Во-вторых, вы вызываете req.write и req.end после того, как запрос уже завершен внутри http.get.А JSON.stringify - совершенно неправильный способ генерации параметров URL.

Вот базовый метод запроса, который будет работать

var url = require('url');
var http = require('http');

function makeRequest(host, path, args, cb) {

  var options = {
    host: host,
    port: 80,
    path: url.format({ pathname: path, query: args})
  };

  http.get(options, function(res) {
    var body = '';

    res.on('data', function(chunk) {
      body += chunk;
    });

    res.on('end', function() {
      cb(body);
    });
  });
};


var searchJSON = {
  location: 'NYC',
  text: "text",
  authID: "apiKey"
};

makeRequest('somesite.com', '/', searchJSON, function(data) {
  console.log(data);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...