国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 建站經驗 > 正文

記錄幾個node、.js錯誤及解決方案

2019-11-02 14:14:41
字體:
來源:轉載
供稿:網友

 幾個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() {
    fs.close(fd);
}, 10);
 
// ...

解決方案:所以我們排查好出現 fs.close 關閉文件描述符的地方,確保 close 之后不會再有 read/write 。


Error: EBADF, close

另外附上在谷歌的過程中看到了另外一個類似的錯誤。這是當你為多種情況做 fs.close(fd); 的處理,然而不幸的是,多個情況被都觸發, fs.close(fd) 調用了多遍,同樣也會出現 EBADF 錯誤。這樣就能出現:

test.on('end', function() {
    fs.close(fd);
    fs.close(fd); // 多調用了一次就會出現
});

不友好的報錯


fs.js:77
      throw err;  // Forgot a callback but don't know where? Use NODE_DEBUG=fs
            ^
Error: EBADF, close
    at Error (native)

解決方案:依舊是排查 fs.close,只不過這次是要保證多種處理不會反復執行 fs.close ,或者你可以使用 try/catch 來無視它。

Error: EBADF, bad file descriptor

最后,當 fd 失效以后進行 read 操作的話,我還以為會出現 Error: EBADF, read 結果并沒有。以下是嘗試出現BUG的代碼:


// ...
 
fs.closeSync(fd);
fs.readSync(fd, new Buffer(1024), 0, 1024);
 
// ...

不過這個報錯會友好很多,有將其調用棧打出來。

fs.js:552
  var r = binding.read(fd, buffer, offset, length, position);
                  ^
Error: EBADF, bad file descriptor
    at Error (native)
    at Object.fs.readSync (fs.js:552:19)
    at command.<anonymous> (/Users/Lellansin/Documents/workspace/node/test-server/app/services/TestService.js:40:6)
    at command.emit (events.js:110:17)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永安市| 尉犁县| 介休市| 黄大仙区| 廊坊市| 青河县| 木兰县| 钟山县| 临安市| 通城县| 卢氏县| 积石山| 克什克腾旗| 普格县| 岳普湖县| 南丹县| 眉山市| 大竹县| 堆龙德庆县| 三都| 盐津县| 乐平市| 堆龙德庆县| 高雄县| 阳信县| 湘潭县| 马龙县| 宣化县| 安顺市| 双江| 晋中市| 绥芬河市| 丹寨县| 南靖县| 呼玛县| 土默特左旗| 鹤山市| 安新县| 鄱阳县| 汕尾市| 扶绥县|