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]
吗?
答案 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);
});