
已解决问题
谷歌lyp0000用户在2016.04.30提交了关于“替天行盗记录几个node.js错误及解决方案”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-04-06T01:13:31。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !
详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !
几
node.jsError:EBADF,write
最近工作写了个
fs.js:77
throwerr;//Forgotacallbackbutdon'tknowwhere?UseNODE_DEBUG=f
^
atError(native)
WTF?!fs.js:77?这是要我去
首先是Error
而Error:EBADF,write表示往错误的
出现这个BUG的场景简而言之,是有一个.on('
//
varfd=
test.on('data',f
fs.write(fd,dat
});
test
f
});
//在end之前close就会出现Error:E
setTimeout(fu
fs.close(fd);
},10);
//
解决方案:所以我们排查
Error:EBADF,close
test.on('end',function(){
fs.close(fd);
fs.cl
});
不友
fs.js:77
throwerr;//
^
Error:EBADF,close
atError(native)
解决方案:依旧是排查fs.close,只不过这次是要保多种处理不会反复执行fs.close,或者你可以使用try/catch来无视它。
Error:EBADF,badfiledescriptor
最后,当fd失效以后进行read操作的话,我还以为会出现Error:EBADF,read结果并没有。以下是尝试出现BUG的代码:
//
fs.closeSync(fd);
fs.readSync(fd,newBuffer(1024),0,1024);
//
不过这个报错会友好很多,有将其调用栈打出来。
fs.js:552
varr=***.read(fd,buffer,offset,length,position);
^
Error:EBADF,badfiledescriptor
atError(native)
atObject.fs.readSync(fs.js:552:19)
atcommand.<anonymous>(/Users/Lellansin/Documents/workspace/node/test-server/app/services/TestService.js:40:6)
atcommand.emit(events.js:110:17)
atChildProcess.emit(events.js:129:20)
atmaybeClose(child_process.js:1015:16)
atSocket.<anonymous>(child_process.js:1183:11)
atSocket.emit(events.js:107:17)
atPipe.close(net.js:485:12)
解决方案:看错误栈去改代码就好了。。
node.jsError:stdoutmaxBufferexceeded
在使用child_process模块中的exec、execFile、spawnSync、execFileSync、execSync方法时需要注意其options参数中的maxBuffer项。
以上方法在执行时会在内存中建一个buffer来缓冲组合所有的输出**,而maxBuffer则是指定该buffer大小的地方。如果输出超过指定的大小则会报maxBufferexceeded的错误。
解决方案是执行的时候估计好大小,设置更大的maxBuffer:
varexec=require('child_process').exec;
varchild=exec('ls-lah',{
encoding:'utf8',
timeout:0,
maxBuffer:5000*1024,//默认200*1024
killSignal:'SIGTERM'
},function(err,stdout,stderr){
console.log(stdout);
});
或者是用spawn的.on('data')事件触发时,手动拼接**到.on('close')事件触发的时候获得完整**。
pomeloCannotcallmethod'forwardMessage'ofundefined
报错信息:
[2014-09-1014:32:45.315][DEBUG]pomelo-[E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibcomponents
connector.js][connector-server-1]handleMessagesessionid:1,msg:{"id":10,"type":0,"compressRoute":0,"route":"user.u
serh**andler.login","body":"{username:'alan_1',password:'123456',dev_id:'6984654'}"}
[2014-09-1014:32:45.320][ERROR]pomelo-[E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibserverserv
er.js]failtoforwardmessage:TypeError:Cannotcallmethod'forwardMessage'ofundefined
atdoForward(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibserverserver.js:334:50)
atdispatch(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibserverserver.js:103:7)
atnext(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibcommonservicefilterService.js:50:7)
atService.beforeFilter(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibcommonservicefilterServi
ce.js:65:3)
atbeforeFilter(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibserverserver.js:242:8)
atpro.globalh**andle(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibserverserver.js:112:3)
atComponent.globalh**andle(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibcomponentsserver.js:74:
14)
athandleMessage(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibcomponentsconnector.js:295:15)
at**ll.<anonymous>(E:svnxjmhtrunksrcservergame-servernode_mo**lespomelolibcomponentsconnector.js:239:5)
atEventEmitter.emit(events.js:95:17)
PomeloClub上有些说法是前端服务器将消息转发到其它服务器过程**现问题,rpc失败。或者可能是handler拼错。
博主检查发现在servers.json中普通server如果配置了"frontend":true就会出现这个问题.尝试把frontend去掉或者改成false就正常了.