我已经设置了一个可以被客户端访问的NodeJS服务器。每隔一段时间,就必须让服务器连接到第二台服务器,并将检索到的信息反馈给客户端。
连接到第二台服务器很容易,但说实话我不知道如何将它发送回客户端。在与第二台服务器连接时似乎禁止res.write
。
来自客户端的连接由handleGetRequest
处理。与第二台服务器的连接从http.get
开始。
var http = require('http');
var url = require('url');
var server = http.createServer(function(req, res) {
var url_parsed = url.parse(req.url, true);
if (req.method ==='GET') {
handleGetRequest(res, url_parsed);
} else {
res.end('Method not supported');
}
});
handleGetRequest = function(res, url_parsed) {
if (url_parsed.path == '/secondary') {
var OPTIONS = {
hostname: "localhost",
port: "8900",
path: "/from_primary"
}
http.get(OPTIONS, function(secget) {
resget.on('data', function(chunk) {
// either store 'chunk' for later use or send directly
});
}).on('error', function(e) {
console.log("Error " + e.message);
});
} else {
res.writeHead(404);
}
res.end('Closed');
};
server.listen(8000);
如何将chunk
从http.request
发送到客户端?
答案 0 :(得分:1)
我认为将callback
传递给handleGetRequest
会解决此问题:
if (req.method === 'GET') {
handleGetRequest(url_parsed, function (err, response) {
if (err) {
return res.sendStatus(500);
}
res.json(response);
});
} else {
res.end('Method not supported');
}
handleGetRequest = function (url_parsed, callback) {
// OPTIONS ...
http.get(OPTIONS, function(resget) {
var data = '';
resget.on('data', function(chunk) {
data += chunk;
});
resget.on('end', function() {
callback(null, data);
});
}).on('error', function(e) {
callback(e);
});
}
答案 1 :(得分:0)
感谢@TalgatMedetbekov的建议。我设法像这样实现它:
LOOKUP
它有效。字符串前面有一个“未定义”,我找不到原因,但基本功能非常完美。
回调构造是同步NodeJS的异步性质所必需的。