2012-11-24 44 views
118

Tôi đã phát triển một chương trình node.js bằng cách sử dụng khung hiển thị trên máy tính của tôi, nơi nó chạy tốt mà không có khiếu nại.Node.js, không thể mở tệp. Lỗi: ENOENT, stat './path/to/file'

Tuy nhiên, khi tôi chạy chương trình trên thiết bị SUSE Studio của tôi, nơi nó được dự định để sống, tôi nhận được một 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 xem quyền của tệp có đúng hay không. 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 khác nhau của nút, nếu điều này quan trọng.

Mọi suy nghĩ?

+1

Từ khi phần đường 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 ra đường dẫn và cấu trúc thư mục là gì? Và làm thế nào bạn đang chạy nút? – loganfsmyth

+1

Cảm ơn, vâng tôi đã chạy tập lệnh từ một thư mục khác và ngu xuẩn giả định rằng đường dẫn tệp sẽ liên quan đến chính tập lệnh. Tôi biết nó là một cái gì đó đơn giản như thế này :) – CalumMc

+0

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

Trả lời

178

Đường dẫn được chỉ định với . liên quan đến thư mục hoạt động hiện tại, không liên quan đến tệp tập lệnh. Vì vậy, các tập tin có thể được tìm thấy nếu bạn chạy node app.js như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ì require tồn tại trên mỗi mô-đun và do đó biết được mô-đun nào đang được gọi.

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

var path = require('path'); 

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

hoặc có khả năng

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

Cảm ơn; đôi khi những điều nhỏ nhặt như thế này khó tìm thấy trong tài liệu, cho những người mới (giống như tôi!). – CalumMc

4

Đây mã để sử dụng app.js bạn

đầu vào quy định cụ thể tên file

res.download(__dirname+'/'+input); 
Các vấn đề liên quan