Почему несоответствие между 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 errno
s для внутренних " 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, и она ищет эту папку (когда я добавил несколько строк обработки ошибок в свой код, консоль выплюнула тот же код ошибки, и это было потому, что я еще не создал каталог, в который я говорил ему сохранить мои изображения)