0

我正在尝试从 localhost:8000 到 localhost:5000 为 url '/serverTest' 发出 GET 请求。我收到套接字挂起错误。我该如何解决?

端口 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)
4

1 回答 1

1

使用时http.request(),您必须在某些时候调用request.end()才能实际发送请求。

请注意,在示例req.end()中被调用。http.request()必须始终调用以req.end()表示您已完成请求 - 即使没有数据写入请求正文。

http.request(options, function(response) {
    // ...
}).end();

或者,对于GET请求,您也可以使用http.get()which will call request.end()

http.get(options, function(response) {
    // ...
});
于 2013-09-03T20:49:27.207 回答