2012-02-13 8 views
7

Así que si ejecuto esta simple llamada en node.js v0.6.7 en OS X 10.6.8 con una ruta falsa, recibo un error, como se esperaba.Por qué una falta de coincidencia entre errno 34 y el código ENOENT

var fs = require("fs"); 
fs.stat("/tmp/foo", function(error, stat) { 
    return console.log(error); 
}); 

Imprime esta salida:

{ [Error: ENOENT, no such file or directory '/tmp/foo'] errno: 34, code: 'ENOENT', path: '/tmp/foo' } 

Mi pregunta es, según /usr/include/sys/errno.h en mi sistema, ENOENT debe tener el código 2, ¿por qué está diciendo este error errno 34 (ERANGE en errno.h), pero emparejándolo con el mensaje de error ENOENT?

Respuesta

8

node.js traduce sistema errno s a interno "errnos" (ver deps/uv/include/uv.h y uv_translate_sys_error en deps/uv/src/unix/error.c o deps/uv/src/win/error.c para un mapeo) para conseguir una representación común para el error condiciones bajo Windows y Unix.

34 es el node.js-errno para ENOENT, entonces todo está bien.

+7

Esto fue muy útil, gracias. Pero ¿por qué 'require ('constantes'). ENOENT' informe 2 en ese caso? ¿Hay alguna otra manera de obtener los errores de Node? –

+1

Un poco tarde, pero quizás útil para otros: parece que los nodos no están expuestos por nodo. Puede usar el módulo npm [errno-codes] (https://npmjs.org/package/errno-codes) para obtener constantes predefinidas para los errnos. – basti1302

+0

Juro que este es un error de nodejs. Debe ser '-2' según la documentación: https://nodejs.org/api/errors.html#errors_error_errno – Pacerier

-2

porque aún no ha creado la carpeta/tmp/foo y está buscando esa carpeta (cuando agregué algunas líneas de manejo de errores a mi código, la consola escupió el mismo código de error y fue porque aún no había creado el directorio en el que le estaba diciendo que guardara mis imágenes)

+0

lea atentamente la pregunta (ya sabe que el directorio no existe) –

4

Parece que node.js cambió el errno con 0.12.0. ENOENT es -2 ahora.

Por lo tanto, es probablemente mejor para comprobar si hay code === 'ENOENT'

Cuestiones relacionadas