应该在节点中监听 http.ClientRequest 的“error”事件吗?

问题描述 投票:0回答:1

我们以这段代码为例:

const https = require('https')
const options = {
    hostname: 'somesite.com',
    port: 443,
    path: '/',
    method: 'GET'
}

const req = https.request(options, res => {
    console.log(`statusCode: ${res.statusCode}`)

    res.on('data', d => {
        //do something with each chunk..
    })
})

req.on('error', error => {//When will this event be fired, if ever?
    console.error(error)
})

req.end()

在许多示例中,我看到人们在收听此事件,但是在查看文档时,我没有看到任何提及:https://nodejs.org/dist/latest-v14.x/docs/api/http.html #http_class_http_clientrequest

列出了各种“错误”事件,例如“超时”、“中止”等,但没有“错误”。

也就是说,ClientRequest 是 tream.Writable 的一个实例(如果我是正确的),它确实发出“错误”事件:https://nodejs.org/dist/latest-v14.x/docs/ api/stream.html#stream_event_error

我正在处理我的真实代码中的超时和中止问题。是否需要这个错误监听器?

javascript node.js http
1个回答
2
投票

文档对此进行了说明

http.request()
:

如果在请求期间遇到任何错误(无论是 DNS 解析、TCP 级别错误还是实际的 HTTP 解析错误),都会在返回的请求对象上发出“error”事件。与所有“错误”事件一样,如果没有注册侦听器,则会抛出错误。

因此,如果您不监听

error
事件(无论是出于日志记录还是恢复目的),您的应用程序在任何此类错误情况下都会崩溃。

© www.soinside.com 2019 - 2024. All rights reserved.