我正在尝试从localhost:8000发出GET请求到localhost:5000作为url'/ serverTest'。我收到套接字挂断错误。我该如何解决这个问题?
端口5000上的服务器(将处理请求的服务器):
var express = require("express"), http = require('http');
app.get('/serverTest', function(req, res){
//authenticate request
//send message
res.writeHead(200, {'Content-Type':'application/json'});
res.end(JSON.stringify({message:'hello'}));
});
app.listen(5000, function() {
console.log("Listening on " + port);
});
端口8000上的服务器(发出请求的服务器):
var express = require("express"), http = require('http');
var port = 8000;
app.listen(port, function() {
console.log("Listening on " + port);
makeACall();
});
function makeACall(){
var options = {
host:'localhost',
port: 5000,
path: '/serverTest',
method: 'GET'
};
http.request(options, function(response) {
var str = '';
response.on('data', function (chunk) {
str += chunk;
});
response.on('end', function () {
console.log(str);
});
});
}
由端口8000托管的服务器获取的错误:
events.js:72
throw er; // Unhandled 'error' event
^
Error: socket hang up
at createHangUpError (http.js:1442:15)
at Socket.socketOnEnd [as onend] (http.js:1538:23)
at Socket.g (events.js:175:14)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:910:16
at process._tickCallback (node.js:415:13)
答案 0 :(得分:1)
使用http.request()
时,您必须在某个时候致电request.end()
以实际发送请求。
请注意,在示例中调用了
req.end()
。使用http.request()
,必须始终致电req.end()
以表示您已完成请求 - 即使没有数据写入请求正文。
http.request(options, function(response) {
// ...
}).end();
或者,对于GET
次请求,您还可以使用http.get()
来调用request.end()
。
http.get(options, function(response) {
// ...
});