幾個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? 這是要我去看內核源代碼?好在項目還不大,拆拆更健康?;税胩斓臅r間之后大概是清楚了。
首先是 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() {
新聞熱點
疑難解答