LinuxでAWS EC2のNode.JSアプリケーションを実行し、fsモジュールを使用してHTMLテンプレートファイルを読み込みます。テンプレートは、常にその場所になりますHTMLは、しかし、テンプレート読書サービスが別の場所に動き回ることがNode.JSのアプリケーションルートを基準にファイルを参照する適切な方法
/server.js
/templates/my-template.html
/services/template-reading-service.js
(深いサブディレクトリなど)の中から:ここではアプリケーションの現在の構造は、テンプレート読書サービス私はそうのように、ファイルをロードするためにfs.readFileSync()を使用します。
Error: ENOENT, no such file or directory './templates/my-template.html'
私は股関節を想定しています:
var templateContent = fs.readFileSync('./templates/my-template.html', 'utf8');
これは、次のエラーがスローされますパスは './'がアプリケーションルートではなく '/ services /'ディレクトリに解決されているためです。私はまた、パスを '../templates/my-template.html'に変更しようとしましたが、うまくいきましたが、それは壊れやすいように見えます。 template-reading-serviceをより深いサブディレクトリに移動すると、そのパスは破損します。
したがって、アプリケーションのルートを基準にファイルを参照する適切な方法は何ですか?
__dirnameは実際には現在のスクリプト/モジュールの場所へのパスではありませんか?したがって、私の例では、 'template-reading-service'の中から実行するときです。js 'は__dirnameが'/services/'に解決されませんか? – user1438940
@ user1438940 '/ server.js'にあるファイルの読み込みコードを実行したと思いました。試して "../templates/my-template.html" – InspiredJW
いいえ、fs.getFileSyncを実行するコードは "template-reading-service.js"にあります。私は "../"を使いたくない。それは私の質問の全体のポイントです。私が "../"を使用し、その後 "template-reading-service.js"を "/ services /"ディレクトリから "/ services/templating /"に移動すると、すべてのコードが壊れます。あるいは、テンプレート・ディレクトリへのパスを、グローバル・コンフィギュレーションの設定として、ディレクトリ構造内の異なる場所にある20種類の他のサービスで使用する場合は、「../」は使用できません。どこからでも作業します – user1438940