親2レベルに戻ってファイルを見つけるために、これをどのように書きますか?
fs.readFile(__dirname + 'foo.bar');
これを試して:
fs.readFile(__dirname + '/../../foo.bar');
相対パスの先頭にあるスラッシュに注意してください。
Path.joinを使用します http://nodejs.org/docs/v0.4.10/api/path.html#path.join
var path = require("path"),
fs = require("fs");
fs.readFile(path.join(__dirname, '../..', 'foo.bar'));
path.join()
は、先頭/末尾のスラッシュを処理し、正しいことを行うだけで、末尾のスラッシュが存在する場合と存在しない場合を覚えておく必要はありません。
私はそれが少しうるさいことを知っていますが、これまでのすべての答えは完全に正しくありません。
Path.join()のポイントは、呼び出し元が使用するディレクトリセパレータを知る必要性を排除することです(コードプラットフォームに依存しません)。
技術的には、正しい答えは次のようになります。
var path = require("path");
fs.readFile(path.join(__dirname, '..', '..', 'foo.bar'));
アレックス・ウェインの答えにコメントとしてこれを追加しましたが、まだ十分な担当者がいませんでした!
編集:user1767586の観察による
最も簡単な方法は、 path.resolve
を使用することです。
path.resolve(__dirname, '..', '..');
path
モジュールが必要になるようです。 ( path.normalize
特に)
var path = require("path"),
fs = require("fs");
fs.readFile(path.normalize(__dirname + "/../../foo.bar"));
別のモジュールがあなたのものを呼び出し、実行中のメインファイルの場所を知りたい場合は、@ Jasonのコードの修正を使用できます。
var path = require('path'),
__parentDir = path.dirname(process.mainModule.filename);
fs.readFile(__parentDir + '/foo.bar');
そうすれば、実際に実行されているスクリプトの場所を取得できます。
親がどこにいるのかわからない場合、これはパスを取得します。
var path = require('path'),
__parentDir = path.dirname(module.parent.filename);
fs.readFile(__parentDir + '/foo.bar');
使用できます
path.join(__dirname, '../..');
これも機能します:
fs.readFile(`${__dirname}/../../foo.bar`);