2012-02-13 25 views
7

Vì vậy, nếu tôi chạy lệnh gọi đơn giản này trong node.js v0.6.7 trên OS X 10.6.8 với đường dẫn giả, tôi nhận được lỗi, như mong đợi.Tại sao một sự không khớp giữa errno 34 và mã ENOENT

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

It in sản lượng này:

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

Câu hỏi của tôi là, theo /usr/include/sys/errno.h trên hệ thống của tôi, ENOENT cần phải có mã 2, vậy tại sao là lỗi này nói errno 34 (ERANGE trong errno.h), nhưng ghép nối nó với thông báo lỗi từ ENOENT?

Trả lời

8

Node.js dịch hệ thống errno s để nội bộ "errnos" (xem deps/uv/include/uv.huv_translate_sys_error trong deps/uv/src/unix/error.c hoặc deps/uv/src/win/error.c cho một ánh xạ) để đạt được một đại diện chung cho lỗi điều kiện trong môi trường Windows và Unix.

34 là node.js-errno cho ENOENT, vì vậy mọi thứ đều ổn.

+7

Điều này thực sự hữu ích, cảm ơn. Nhưng tại sao 'require ('hằng số') .IOENT' báo cáo 2 trong trường hợp đó? Có cách nào khác để có được Node's errnos không? –

+1

Một chút trễ, nhưng có thể hữu ích cho người khác: Có vẻ như các errnos không bị lộ bởi nút. Bạn có thể sử dụng mô-đun npm [errno-codes] (https://npmjs.org/package/errno-codes) để nhận các hằng số được xác định trước cho errnos. – basti1302

+0

Tôi thề đây là lỗi nút. Nó phải là '-2' cho mỗi tài liệu: https://nodejs.org/api/errors.html#errors_error_errno – Pacerier

-2

vì bạn chưa tạo thư mục/tmp/foo và đang tìm thư mục đó (khi tôi thêm một số lỗi xử lý dòng vào mã của mình, bảng điều khiển sẽ phát ra cùng mã lỗi và đó là vì tôi chưa tạo thư mục tôi đã yêu cầu lưu hình ảnh của tôi)

+0

đọc kỹ câu hỏi (anh ta đã biết rằng thư mục đó không tồn tại) –

4

Có vẻ như node.js đã thay đổi errno bằng 0.12.0. ENOENT-2 ngay bây giờ.

Vì vậy, tốt hơn nên kiểm tra code === 'ENOENT'

Các vấn đề liên quan