事件:'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'事件。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。