事件:'clientError'
版本 | 变化 |
---|---|
v12.0.0 | 如果发生 HPE_HEADER_OVERFLOW 错误,默认行为将返回 431 Request Header Fields Too Large。 |
v9.4.0 |
|
v6.0.0 | 如果为 |
v0.1.94 | 添加于:v0.1.94 |
参数
exception
<Error>socket
<stream.Duplex>
如果客户端连接发出 'error'
事件,则会在此处转发。此事件的侦听器负责关闭/销毁底层套接字。例如,人们可能希望使用自定义 HTTP 响应更优雅地关闭套接字,而不是突然切断连接。
除非用户指定 <net.Socket> 以外的套接字类型,否则此事件保证会传递 <net.Socket> 类的实例,该类是 <stream.Duplex> 的子类。
默认行为是尝试使用 HTTP '400 Bad Request' 或 HTTP '431 Request Header Fields Too Large' 在
错误的情况下尝试关闭套接字。如果套接字不可写或已经写入数据,它会立即被销毁。HPE_HEADER_OVERFLOW
socket
是错误源自的
对象。net.Socket
const http = require('node:http');
const server = http.createServer((req, res) => {
res.end();
});
server.on('clientError', (err, socket) => {
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
server.listen(8000);
当 'clientError'
事件发生时,没有 request
或 response
对象,因此发送的任何 HTTP 响应,包括响应头和有效负载,都必须直接写入 socket
对象。必须注意确保响应是格式正确的 HTTP 响应消息。
err
是 Error
的一个实例,带有两个额外的列:
bytesParsed
:Node.js 可能正确解析的请求包的字节数;rawPacket
:当前请求的原始数据包。
在某些情况下,客户端已经收到响应和/或套接字已经被销毁,例如 ECONNRESET
错误。在尝试向套接字发送数据之前,最好检查它是否仍然可写。
server.on('clientError', (err, socket) => {
if (err.code === 'ECONNRESET' || !socket.writable) {
return;
}
socket.end('HTTP/1.1 400 Bad Request\r\n\r\n');
});
相关用法
- Node.js MessagePort 'close'事件用法及代码示例
- Node.js ChildProcess 'close'事件用法及代码示例
- Node.js fs.FSWatcher 'change'事件用法及代码示例
- Node.js http.ClientRequest 'connect'事件用法及代码示例
- Node.js tls.Server 'keylog'事件用法及代码示例
- Node.js cluste 'disconnect'事件用法及代码示例
- Node.js proces 'exit'事件用法及代码示例
- Node.js stream.Writable 'pipe'事件用法及代码示例
- Node.js stream.Readable 'end'事件用法及代码示例
- Node.js cluste 'fork'事件用法及代码示例
- Node.js stream.Writable 'unpipe'事件用法及代码示例
- Node.js Http2Session 'remoteSettings'事件用法及代码示例
- Node.js Worker 'listening'事件用法及代码示例
- Node.js tls.Server 'resumeSession'事件用法及代码示例
- Node.js InterfaceConstructor 'pause'事件用法及代码示例
- Node.js stream.Readable 'data'事件用法及代码示例
- Node.js proces 'uncaughtException'事件用法及代码示例
- Node.js Http2Session 'localSettings'事件用法及代码示例
- Node.js REPLServer 'exit'事件用法及代码示例
- Node.js cluste 'online'事件用法及代码示例
- Node.js tls.TLSSocket 'session'事件用法及代码示例
- Node.js Worker 'exit'事件用法及代码示例
- Node.js cluste 'exit'事件用法及代码示例
- Node.js Http2Stream 'trailers'事件用法及代码示例
- Node.js http.ClientRequest 'information'事件用法及代码示例
注:本文由纯净天空筛选整理自nodejs.org大神的英文原创作品 'clientError'事件。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。