Node.js、ファイルを開くことができません。エラー:ENOENT、統計 './path/to/file'


126

私は自分のコンピューターで高速フレームワークを使用してnode.jsプログラムを開発しました。このプログラムは問題なく正常に動作します。

ただし、SUSE Studioアプライアンスでプログラムを実行すると、プログラムが実行される予定であり、ファイルを操作するとエラーが発生します。

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

ファイルの権限が正しいことを確認しました。これが問題になる場合、私のコンピューターとアプライアンスは異なるバージョンのノードを実行しています。

何かご意見は?


1
パスは相対パスなので、おそらく別のディレクトリから実行していますか?パスをどのように生成し、ディレクトリ構造は何ですか?そして、どのようにノードを実行していますか?
loganfsmyth

1
ありがとう、はい、私は別のディレクトリからスクリプトを実行しており、ファイルパスはスクリプト自体の相対パスであると誤って想定していました。私はそれがこのような単純なものであることを知っていました:)

それは修正可能でなければなりません。どのようにパスを作成しているか、そしてそれが解決することを期待するものを示すコードを追加できますか?特定のファイルに対して相対的にしたい場合は、通常、次のようにします__dirname + 'path/to/file';
loganfsmyth

ええ、それは私が今やったことです。私は "node〜/ path / to / script.js"を実行してスクリプトを実行しており、スクリプト内のファイルへの相対参照が "〜/ path / to"に解決されることを期待しています。

回答:


187

aで指定されたパス.は、スクリプトファイルからの相対パスではなく、現在の作業ディレクトリからの相対パスです。あなたが実行した場合、ファイルが見つかる可能性がありますのでnode app.js、あなたが実行している場合ではありませんnode folder/app.js。これに対する唯一の例外はrequire('./file')requireモジュールごとに存在するため、それがどのモジュールから呼び出されているかを認識しているために可能です。

スクリプトからの相対パスを作成するには、__dirname変数を使用する必要があります。

var path = require('path');

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

または潜在的に

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

11
ありがとう。初心者(私のような!)にとって、ドキュメントで見つけるのが難しいのは、このような小さなことです。

5

ここでapp.jsを使用するためのコード

入力はファイル名を指定します

res.download(__dirname+'/'+input);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.