为什么我的ExpressJS不能正确执行请求命令?

时间:2011-09-12 02:25:13

标签: node.js express

  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 个答案:

答案 0 :(得分:1)

你在这段代码中犯了很多错误,很明显你需要检查异步代码流的工作原理。您在定义之前调用makeRequest,并且您尝试从http.get中的响应回调中返回一个值,这将无效。您还缺少“var”关键字。

我看到的主要问题是您在请求正文中传递了您的URL参数,这将无效。其次,在http.get内部已经结束请求后,您正在调用req.write和req.end。而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);
});