为什么errno 34和ENOENT代码不匹配?

因此,如果我在具有伪造path的OS X 10.6.8上的node.js v0.6.7中运行此简单调用,则会出现错误。

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应该有代码2,那么为什么这个错误说errno 34 (errno.h中的ERANGE),但是将它与错误消息ENOENT

node.js将系统errno转换为内部的“errnos”(参见deps/uv/include/uv.h deps/uv/src/unix/error.cdeps/uv/src/win/error.c中的deps/uv/include/uv.huv_translate_sys_error映射),以便在Windows和Unix下实现错误条件的共同表示。

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

看来node.js用0.12.0改变了errnoENOENT现在是-2

所以最好检查一下code === 'ENOENT'

因为你还没有创build文件夹/ tmp / foo,它正在寻找该文件夹(当我添加了一些error handling行到我的代码,控制台吐出相同的错误代码,这是因为我还没有创build目录我告诉它保存我的图像)