为什么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.c
或deps/uv/src/win/error.c
中的deps/uv/include/uv.h
和uv_translate_sys_error
映射),以便在Windows和Unix下实现错误条件的共同表示。
34是ENOENT
的node.js-errno,所以一切都没事。
看来node.js用0.12.0改变了errno
。 ENOENT
现在是-2
。
所以最好检查一下code === 'ENOENT'
因为你还没有创build文件夹/ tmp / foo,它正在寻找该文件夹(当我添加了一些error handling行到我的代码,控制台吐出相同的错误代码,这是因为我还没有创build目录我告诉它保存我的图像)