Node.js, tidak bisa membuka file. Kesalahan: ENOENT, stat './path/to/file'

126

Saya telah mengembangkan program node.js menggunakan framework express di komputer saya, di mana ia berjalan dengan baik tanpa keluhan.

Namun, ketika saya menjalankan program pada alat SUSE Studio saya, di mana ia dimaksudkan untuk tinggal, saya menerima kesalahan di setiap interaksi file.

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

Saya telah memeriksa bahwa hak akses file sudah benar, dan benar. Komputer dan alat saya menjalankan versi node yang berbeda, jika ini penting.

Adakah pikiran?


sumber
1
Karena path relatif, mungkin Anda menjalankannya dari direktori yang berbeda? Bagaimana Anda menghasilkan jalur dan apa struktur direktori? Dan bagaimana Anda menjalankan simpul?
loganfsmyth
1
Terima kasih, ya saya menjalankan skrip dari direktori yang berbeda dan dengan bodoh berasumsi bahwa path file akan relatif dari skrip itu sendiri. Saya tahu itu sesuatu yang sederhana seperti ini :)
Itu harus diperbaiki. Bisakah Anda menambahkan beberapa kode yang menunjukkan bagaimana Anda membuat jalan dan apa yang Anda harapkan untuk diselesaikan? Jika Anda menginginkannya relatif terhadap file tertentu, biasanya Anda akan melakukannya__dirname + 'path/to/file';
loganfsmyth
Ya, itulah yang saya lakukan sekarang. Saya menjalankan skrip dengan mengeksekusi "node ~ / path / to / script.js" dan mengharapkan referensi relatif ke file dalam skrip saya untuk menyelesaikan ke "~ / path / to" Terima kasih!

Jawaban:

187

Path yang ditentukan dengan a .relatif terhadap direktori kerja saat ini, bukan relatif terhadap file skrip. Jadi file tersebut mungkin ditemukan jika Anda menjalankan node app.jstetapi tidak jika Anda menjalankan node folder/app.js. Satu-satunya pengecualian untuk ini adalah require('./file')dan itu hanya mungkin karena requireada per-modul dan dengan demikian tahu darimana modul itu dipanggil.

Untuk membuat jalur relatif ke skrip, Anda harus menggunakan __dirnamevariabel.

var path = require('path');

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

atau berpotensi

path.join(__dirname, 'path', 'to', 'file')
loganfsmyth
sumber
11
Terima kasih; terkadang hal-hal kecil seperti ini yang sulit ditemukan dalam dokumentasi, untuk pemula (seperti saya!).
5

Di sini kode untuk menggunakan app.js Anda

input menentukan nama file

res.download(__dirname+'/'+input);
AmirtharajCVijay
sumber