这是我的node.js文件,发生了什么,用户输入一个id并将其发送到服务器端,服务器随后将其通过第三方的api进行搜索。我遇到的问题是,在我从api获取信息之前,用户发送的初始id的响应得到了res.end,从而在客户端获得了一个很大的未定义或空字符串。如何使res.end等待,直到它从api接收数据然后将其发送到客户端?或者我完全错了,不应该这样做吗?
var http = require('http');
var https = require('https');
var url = require('url');`
http.createServer(function (req, res) {
var id = url.parse(req.url,false).query;
var realId = getInfoFromApi(id);
res.setHeader('Access-Control-Allow-Origin', '*');
res.writeHead(200);
res.end(JSON.stringify(realId));
}).listen(3000, '127.0.0.1');
function getInfoFromApi(id) {
var url = "https://random.com/" + id + "?api_key=blabla";
var test = https.get(url, function(res) {
var body = '';
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
var theId = JSON.parse(body)
console.log("Got response: ", theId);
});
}).on('error', function(e) {
console.log("Got error: ", e);
});
return test;
}
任何有关我应该寻找的信息或有助于我的资源都将非常感谢,提前感谢您的帮助。
另外作为奖励问题,我应该使用POST方法而不是从服务器到api-server的GET吗?或者POST隐私只对客户端服务器有影响吗?我很好奇,如果我使用GET而不是POST,聪明的客户端是否能够访问服务器http.requests,或者它甚至根本不重要,因为它来自服务器而不是客户端。
哦,还有一件事,我在讨论是否应该使用https.createServer,因为我必须使用https进行https.get,这样我就可以从require中删除http模块,只使用https。如果我这样做,性能或其他方面是否有任何重大差异?
提前再次感谢。
编辑:
http.createServer(function (req, res) {
var id = url.parse(req.url, false).query;
var link = "https://random.com/" + id + "?api_key=blabla";
var testo = https.get(link, function (rez) {
var body = '';
rez.on('data', function (chunk) {
body += chunk;
});
rez.on('end', function () {
var endRes = body
res.setHeader('Access-Control-Allow-Origin', '*');
res.writeHead(200);
res.end(endRes);
});
}).on('error', function (e) {
console.log("Got error: ", e);
});
}).listen(3000, '127.0.0.1');
我在阅读回调后设法改变它。谢谢你。它现在工作正常,很高兴,再次感谢。我现在的问题是,如果几十个或几百个人在同一时间搜索,这项工作是否完美无缺?连接到服务器的每个客户端是否都有自己的单独功能 thing ,它们按照自己的节奏运行而不会干扰其他客户端?再次感谢您的帮助。