2012-02-13 33 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'

相关问题