来自node.js本地服务器端口5000到8000的http请求给出错误

时间:2013-09-03 20:38:42

标签: javascript node.js http request

我正在尝试从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)

1 个答案:

答案 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) {
    // ...
});