Node.js, không thể mở tệp. Lỗi: ENOENT, stat './path/to/file'


126

Tôi đã phát triển một chương trình node.js bằng khung express trên máy tính của mình, nơi nó chạy tốt mà không có khiếu nại.

Tuy nhiên, khi tôi chạy chương trình trên thiết bị SUSE Studio của mình, nơi nó dự định sống, tôi nhận được lỗi tại bất kỳ tương tác tệp nào.

Error: ENOENT, stat './path/to/file'

Tôi đã kiểm tra rằng các quyền của tập tin là chính xác. Máy tính của tôi và thiết bị của tôi đang chạy các phiên bản nút khác nhau, nếu điều này quan trọng.

Có suy nghĩ gì không?


1
Vì đường dẫn là tương đối, có lẽ bạn đang chạy nó từ một thư mục khác? Làm thế nào bạn tạo đường dẫn và cấu trúc thư mục là gì? Và bạn đang chạy nút như thế nào?
loganfsmyth

1
Cảm ơn, vâng, tôi đã chạy tập lệnh từ một thư mục khác và dại dột cho rằng đường dẫn tệp sẽ là tương đối của chính tập lệnh. Tôi biết nó là một cái gì đó đơn giản như thế này :)

Nó nên được sửa chữa. Bạn có thể thêm một số mã cho thấy cách bạn đang thực hiện đường dẫn và những gì bạn mong đợi nó sẽ giải quyết? Nếu bạn muốn nó liên quan đến một tệp cụ thể, thông thường bạn sẽ làm__dirname + 'path/to/file';
loganfsmyth

Vâng, đó là những gì tôi đã làm bây giờ. Tôi đã chạy tập lệnh bằng cách thực thi "nút ~ / path / to / script.js" và mong đợi các tham chiếu tương đối đến các tệp trong tập lệnh của mình để giải quyết "~ / path / thành" Cảm ơn!

Câu trả lời:


187

Các đường dẫn được chỉ định với a .có liên quan đến thư mục làm việc hiện tại, không liên quan đến tệp script. Vì vậy, tập tin có thể được tìm thấy nếu bạn chạy node app.jsnhưng không phải nếu bạn chạy node folder/app.js. Ngoại lệ duy nhất cho điều này là require('./file')và điều đó chỉ có thể bởi vì requiretồn tại trên mỗi mô-đun và do đó biết nó được gọi từ mô-đun nào.

Để tạo một đường dẫn liên quan đến tập lệnh, bạn phải sử dụng __dirnamebiến.

var path = require('path');

path.join(__dirname, 'path/to/file')

hoặc có khả năng

path.join(__dirname, 'path', 'to', 'file')

11
Cảm ơn; đôi khi những thứ nhỏ bé như thế này rất khó tìm thấy trong tài liệu, cho người mới (như tôi!).

5

Đây là mã để sử dụng app.js của bạn

đầu vào chỉ định tên tệp

res.download(__dirname+'/'+input);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.