在响应客户端后接收API信息(发送undefined而不是api信息)

时间:2015-05-08 05:17:35

标签: javascript node.js

这是我的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 ,它们按照自己的节奏运行而不会干扰其他客户端?再次感谢您的帮助。

0 个答案:

没有答案