2012-02-13 65 views
7

因此,如果我在帶有僞造路徑的OS X 10.6.8上的node.js v0.6.7中運行此簡單調用,則會出現錯誤,如預期的那樣。爲什麼errno 34和代碼之間不匹配ENOENT

var fs = require("fs"); 
fs.stat("/tmp/foo", function(error, stat) { 
    return console.log(error); 
}); 

它打印輸出:

{ [Error: ENOENT, no such file or directory '/tmp/foo'] errno: 34, code: 'ENOENT', path: '/tmp/foo' } 

我的問題是,根據/usr/include/sys/errno.h我的系統上,ENOENT應該有碼2,所以這是爲什麼錯誤說errno.h中錯誤號34(ERANGE ),但將它與來自ENOENT的錯誤消息配對?

回答

8

的node.js平移系統errno s到內部「errnos」(見deps/uv/src/unix/error.cdeps/uv/src/win/error.cdeps/uv/include/uv.huv_translate_sys_error用於映射),以實現用於Windows和Unix下錯誤條件的共同表示。

34是ENOENT的node.js-errno,所以一切都很好。

+7

這是真正有用的,謝謝。但是爲什麼'require('constants').ENOENT'報告2在這種情況下?有另一種獲得Node的errnos的方法嗎? – 2012-05-05 00:19:19

+1

有點晚了,但可能對其他人有幫助:看起來errnos沒有被節點暴露。您可以使用npm模塊[errno-codes](https://npmjs.org/package/errno-codes)獲取errnos的預定義常量。 – basti1302 2013-09-05 05:25:04

+0

我發誓這是一個nodejs錯誤。它應該是每個文檔的'-2':https://nodejs.org/api/errors.html#errors_error_errno – Pacerier 2017-02-21 08:15:15

-2

因爲您還沒有創建文件夾/ tmp/foo,它正在尋找該文件夾 (當我向代碼中添加了一些錯誤處理行時,控制檯吐出相同的錯誤代碼,這是因爲我還沒有創建目錄我告訴它保存我的圖像到)

+0

仔細閱讀問題(他已經知道該目錄不存在) – 2015-01-27 18:20:05

4

看來,node.js更改errno與0.12.0。 ENOENT現在是-2

所以它可能是更好的檢查code === 'ENOENT'

相關問題