Node.js, dosyaları açamaz. Hata: ENOENT, stat './path/to/file'


126

Bilgisayarımdaki ekspres çerçeveyi kullanarak herhangi bir şikayet olmadan sorunsuz çalıştığı bir node.js programı geliştirdim.

Ancak programı, yaşaması amaçlanan SUSE Studio cihazımda çalıştırdığımda, herhangi bir dosya etkileşiminde bir hata alıyorum.

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

Dosya izinlerinin doğru olup olmadığını kontrol ettim. Bilgisayarım ve cihazım, önemliyse farklı düğüm sürümleri çalıştırıyor.

Düşüncesi olan var mı?


1
Yol göreceli olduğu için, belki de onu farklı bir dizinden çalıştırıyorsunuzdur? Yolu nasıl oluşturuyorsunuz ve dizin yapısı nedir? Ve düğümü nasıl çalıştırıyorsun?
loganfsmyth

1
Teşekkürler, evet betiği farklı bir dizinden çalıştırıyordum ve aptalca dosya yolunun betiğin kendisiyle ilişkili olacağını varsaydım. Bunun gibi basit bir şey olduğunu biliyordum :)

Tamir edilebilir olmalı. Yolu nasıl yaptığınızı ve neye dönüşmesini beklediğinizi gösteren bir kod ekleyebilir misiniz? Belirli bir dosyaya göre olmasını istiyorsanız, normalde yaparsınız__dirname + 'path/to/file';
loganfsmyth

Evet, şimdi yaptığım buydu. Komut dosyasını "node ~ / path / to / script.js" komutunu çalıştırarak ve komut dosyamdaki dosyalara göre "~ / path / to" olarak çözümlenmesini bekliyordum. Teşekkürler!

Yanıtlar:


187

A ile belirtilen yollar ., betik dosyasına göre değil, geçerli çalışma dizinine göredir. Böylece dosya, çalıştırırsanız node app.jsancak çalıştırmazsanız bulunabilir node folder/app.js. Bunun tek istisnası require('./file')ve bunun mümkün olmasının tek nedeni requiremodül başına var olması ve dolayısıyla hangi modülden çağrıldığını bilmesidir.

Komut dosyasına göre bir yol oluşturmak için __dirnamedeğişkeni kullanmanız gerekir .

var path = require('path');

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

veya potansiyel olarak

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

11
Teşekkürler; Bazen yeni başlayanlar için (benim gibi!) belgelerde bulunması zor olan bunun gibi küçük şeylerdir.

5

İşte app.js'nizi kullanmak için kod

girdi dosya adını belirtir

res.download(__dirname+'/'+input);
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.