Почему несоответствие между errno 34 и кодом ENOENT

поэтому, если я запускаю этот простой вызов в узле.js v0.6.7 на OS X 10.6.8 с фиктивным путем я получаю ошибку, как и ожидалось.

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 (ERANGE in errno.ч), но сочетать его с сообщением об ошибке от ENOENT?

3 ответов


узел.js переводит system errnos для внутренних " errnos "(см. deps/uv/include/uv.h и uv_translate_sys_error на deps/uv/src/unix/error.c или deps/uv/src/win/error.c для отображения) как достичь общего представления для условий ошибок в Windows и Unix.

34-это узел.js-errno для ENOENT, так что все в порядке.


кажется, что узел.js изменил errno с 0.12.0. ENOENT is -2сейчас.

так что, вероятно, лучше проверить на code === 'ENOENT'


потому что вы еще не создали папку /tmp/foo, и она ищет эту папку (когда я добавил несколько строк обработки ошибок в свой код, консоль выплюнула тот же код ошибки, и это было потому, что я еще не создал каталог, в который я говорил ему сохранить мои изображения)