Nodejs http.request的问题

Nodejs http.request的问题

var requestOptions={ host:‘117.25.150.78’, port:8080, path:’/url’, method:‘GET’ } http.request(requestOptions,function (res){ res.on(‘data’,function (data){ console.log(data.toString()) }); }); 报错: events.js:72 throw er; // Unhandled ‘error’ event ^ Error: socket hang up at createHangUpError (http.js:1472:15) at Socket.socketOnEnd [as onend] (http.js:1568:23) at Socket.g (events.js:180:16) at Socket.EventEmitter.emit (events.js:117:20) at _stream_readable.js:919:16 at process._tickCallback (node.js:419:13)


6 回复

在使用 Node.js 的 http.request 方法时,如果遇到 “socket hang up” 错误,这通常表示请求被服务器意外终止了。可能的原因包括网络问题、服务器超时或者服务器没有正确处理请求。

为了更好地处理这种情况,我们可以在请求对象上添加错误处理逻辑。下面是一个改进的示例代码,展示如何正确处理错误事件:

const http = require('http');

var requestOptions = {
    host: '117.25.150.78',
    port: 8080,
    path: '/url',
    method: 'GET'
};

// 创建 HTTP 请求
const req = http.request(requestOptions, (res) => {
    res.setEncoding('utf8');
    let responseString = '';

    // 接收数据
    res.on('data', (data) => {
        responseString += data;
    });

    // 数据接收完毕后,打印响应结果
    res.on('end', () => {
        console.log(responseString);
    });
});

// 错误处理
req.on('error', (error) => {
    console.error(`Problem with request: ${error.message}`);
});

// 发送请求
req.end();

解释

  1. 创建请求

    • 使用 http.request 方法创建一个请求对象。
    • 传递 requestOptions 对象,其中包含目标主机、端口、路径和请求方法。
  2. 设置响应处理器

    • 添加 'data' 事件处理器来收集响应数据。
    • 添加 'end' 事件处理器,在所有数据接收完毕后打印完整的响应。
  3. 错误处理

    • 通过 req.on('error', ...) 监听并处理请求过程中可能出现的错误。
    • 在错误事件处理器中输出错误信息,以便调试。
  4. 发送请求

    • 调用 req.end() 方法发送请求。

通过这种方式,可以确保在请求过程中出现任何问题时,都能捕获到错误,并进行适当的处理。


var req = http.request();
req.on('error', ->)  

监听 error 事件就可以防止进程挂掉了。

res.on(‘error’, function(e) { console.log(e.message); }); error事件也监听了。。。还是那样的

搞错了。。是req的。。

先确定117.25.150.78:8080/url能访问先吧。

根据你的描述,错误信息Error: socket hang up通常表示HTTP请求在处理过程中遇到了问题。这个问题可能是由于服务器没有正确响应或者网络问题导致的。以下是一些可能的原因和解决方案:

  1. 确保服务器地址和端口正确:确认hostport是否正确。
  2. 检查路径:确认path是否正确。
  3. 增加错误处理:确保添加错误处理逻辑来捕获并处理可能发生的错误。

下面是一个改进后的代码示例,包含错误处理逻辑:

var http = require('http');

var requestOptions = {
    host: '117.25.150.78',
    port: 8080,
    path: '/url',
    method: 'GET'
};

var req = http.request(requestOptions, function(res) {
    res.setEncoding('utf8');
    res.on('data', function(data) {
        console.log(data);
    });
});

req.on('error', function(e) {
    console.error("Problem with request: " + e.message);
});

req.end();

解释:

  • req.on('error', function(e) { ... }):添加了错误处理逻辑,这样可以捕获并打印错误信息。
  • req.end():调用req.end()来结束请求,这是必需的步骤。

确保你的服务器能够正常响应请求,并且网络连接没有问题。如果问题仍然存在,请检查服务器日志或使用工具(如curl)测试相同的请求。

回到顶部