Почему несоответствие между errno 34 и кодом ENOENT - PullRequest
7 голосов
/ 13 февраля 2012

Так что, если я выполню этот простой вызов в node.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 в errno.h), но сопряжена с сообщением об ошибке от ENOENT

Ответы [ 3 ]

8 голосов
/ 13 февраля 2012

node.js переводит системные 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 является node.js-errno для ENOENT, так что все в порядке.

4 голосов
/ 10 февраля 2015

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

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

0 голосов
/ 20 февраля 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...