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

时间:2012-02-13 00:04:14

标签: node.js posix

因此,如果我在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在我的系统上,ENOENT应该有代码2,那么为什么这个错误说errno 34(errno.h中的ERANGE),但是配对它带有来自ENOENT的错误消息?

3 个答案:

答案 0 :(得分:8)

node.js将系统errno转换为内部“errnos”(请参阅​​deps/uv/include/uv.h中的uv_translate_sys_errordeps/uv/src/unix/error.cdeps/uv/src/win/error.c以获取映射)在Windows和Unix下实现错误条件的通用表示。

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

答案 1 :(得分:4)

似乎node.js用0.12.0改变了errnoENOENT现在是-2

因此,最好检查code === 'ENOENT'

答案 2 :(得分:-2)

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