2012-11-18 38 views
6

Tôi có tệp Node.js được gọi là "server.js".Thực thi tệp Node.js từ bên ngoài đường dẫn tệp ngắt thư mục

Trong kịch bản, tôi mở một số tập tin sử dụng cái gì đó như:

var certPem = fs.readFileSync('cert_and_key_dev.pem', encoding='ascii'); 

Sử dụng vỏ bash, nếu tôi cd vào thư mục chứa server.js là, và chạy lệnh:

[mybashshell] $ node server.js

Nó hoạt động, tôi đã không có lỗi. Máy chủ khởi chạy và chạy.

Bây giờ khi tôi cd OUT OF thư mục chứa tệp server.js, hãy chạy lại lệnh shell một lần nữa để khởi chạy máy chủ của tôi.

Nó phàn nàn về đường dẫn tệp của tôi tới "cert_and_key_dev.pem" bị hỏng.

Tôi đã không mong đợi điều gì đó như thế này xảy ra. Tôi mặc dù đường dẫn được sử dụng trong tập tin kịch bản đang được thực hiện nên liên quan đến tập tin kịch bản, không phải đến vị trí mà tôi thực hiện lệnh bash shell của tôi.

Bất kỳ ý tưởng nào?

Trả lời

13

Đặt điều này ở đầu tập lệnh của bạn.

process.chdir(__dirname); 

Điều này sẽ thay đổi thư mục làm việc của quy trình vào đường dẫn thư mục (__dirname) đang được thực hiện.

Để biết thêm thông tin về hàm đọc this.

+0

Có bất kỳ lợi ích nào giữa phương pháp này so với phương pháp được đưa ra bởi chbrown không? Tôi tò mò về cách nào là thích hợp hơn. – Zhang

+0

Nó thực sự phụ thuộc vào mục đích. Nếu bạn đang chạy nhiều hơn một "máy chủ", tôi sẽ đề nghị thay đổi thành '__dirname'. Ví dụ: nếu bạn đang chạy tập lệnh tải lên thư mục, tôi sẽ đề xuất sử dụng mã của chbrown. Bạn phải cân nhắc tần suất bạn dự định sử dụng đường dẫn thư mục làm việc hiện tại trên đường dẫn thư mục của tập lệnh hiện tại. –

7

Hoặc

var path = require('path'); 
var key = path.join(__dirname, 'cert_and_key_dev.pem'); 
var certPem = fs.readFileSync(key, encoding='ascii'); 

Nếu bạn không muốn cd vì lý do gì.

+0

LOL, cảm ơn các bạn, cả hai đều làm việc nhưng tôi không biết nên chấp nhận cái nào, ước gì tôi có thể đánh dấu cả hai câu trả lời. Tôi sẽ đưa nó cho Julian Lannigan kể từ khi ông trả lời đầu tiên và có thể sử dụng tăng cường rep (hy vọng bạn không nhớ chbrown). – Zhang

+1

Khi nghi ngờ, mã ít hơn sẽ thắng. Nếu bạn không cần phải biết bạn đã bắt đầu tập lệnh nào, câu trả lời của Julian sẽ tốt hơn. – chbrown

+0

Nhưng hãy nhớ Zhang, rằng bạn luôn có thể lưu trữ thư mục làm việc hiện tại trong một biến trước khi thay đổi nó. Gọi 'process.cwd()' –

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