几个node.js错误及解决办法整理如下
node.js Error: EBADF, write
最近工作写了个小项目,本以为能好好喝下茶,可是让人想掀桌的报错出现了。
fs.js:77
throw err; // Forgot a callback but don't know where? Use NODE_DEBUG=fs
^
Error: EBADF, write
at Error (native)
WTF?! fs.js: 77? 这是要我去看内核源代码?好在项目还不大,拆拆更健康。花了半天的时间之后大概是清楚了。
首先是 Error 的名字 EBADF 其意义是 bad file descriptor 错误的文件描述符。
而 Error: EBADF, write 表示往错误的文件描述符里面写数据了。
出现这个BUG的场景简而言之,是有一个 .on('data') 事件拿到数据往 fd 里面写,这个时候某个操作抛了 error 我在处理error 的时候 close 了这个 fd,而另外一边去还在触发 data 事件想往这个(已经被我 close 的)fd里面写数据。如下:
// ...
var fd = fs.openSync(path, 'w');
test.on('data', function(data) {
fs.write(fd, data);
});
test.on('end', function() {
fs.close(fd);
});
// 在 end 之前 close 就会出现 Error: EBADF, write
setTimeout(function() {
新闻热点
疑难解答