如何找出错误源自何处?错误输出看起来不太具描述性。从日志中可以看出ECONNRESET
错误。
process.on('uncaughtException', function(err) {
})
答案 0 :(得分:1)
我有同样的问题。
很难解决的是,这不是在我的代码中,而是在我使用的库中。
因此,您也已经发现,提供的堆栈跟踪完全没有帮助。即使在安装了longjohn
之类的软件包之后,您从此服务器崩溃中获得的堆栈跟踪也是内部的:
Error: read ECONNRESET
at TCP.onStreamRead (internal/stream_base_commons.js:111:27)
---------------------------------------------
at _destroy (internal/streams/destroy.js:34:15)
at Socket._destroy (net.js:607:3)
at Socket.destroy (internal/streams/destroy.js:32:8)
at TCP.onStreamRead (internal/stream_base_commons.js:111:19)
Waiting for the debugger to disconnect...
您需要处理emitter.on("error")
事件,如此处基本所述:Node js ECONNRESET
在我的情况下,我可以通过curl
请求发送无效的密码来重现该错误。之所以能够解决,是因为我使用的库公开了request
对象用于传入请求。
因此,这是我的解决方案代码:
function onRequest(requestDetails){
requestDetails.request.connection.on( "error", ( _err ) => {
log.error( "request.connection.on.error", _err );
} );
let reqSocket = requestDetails.request.socket;
reqSocket.on( "error", ( _err ) => {
log.error( "request.socket.on.error", _err );
reqSocket.destroy( _err );
} );
requestDetails.request.on( "error", ( _err ) => {
log.error( "request.on.error", _err );
} );
// my actual request handling code goes here.....
}
我还为server
对象添加了错误处理程序,尽管在这种情况下不需要这样做:
server.on( 'requestFailed', ( { request, error }: any ) => {
log.error( `Request ${ request.url } failed`, error );
} );
server.on( 'error', ( ...args: any[] ) => {
log.error( "server.on.error", args );
} );
server.on( 'connection', function ( socket ) {
socket.on( 'error', function ( err ) {
log.error( "Client socket error:", err );
socket.destroy( err );
} );
} );