1

私は多くの人々が次のようにそれらのroutes/index.jsですべてのルートを動的に生成しているのを見てきました:

require("fs").readdirSync("./routes", 'utf8').forEach(function(file) {
    if (file != 'index.js' && file != '.DS_Store') {
        require("./"+file);
    }
});

これは開発では正常に機能しますが、本番環境では機能しません。これを削除してルートを手動で追加すると、正常に機能します。何か案は?

あなたがそれが役立つと思うなら、これが私のエラーです:

node.js:134

throw e; // process.nextTick error, or 'error' event on first tick

Error: ENOENT, No such file or directory './routes'
    at Object.readdirSync (fs.js:376:18)
    at Object.<anonymous> (/app/routes/index.js:4:15)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)
    at require (module.js:346:19)
    at Object.<anonymous> (/app/server.js:50:14)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
Process died with exit code 1. Restarting...
4

2 に答える 2

3

本番環境では、現在のディレクトリが「routes」ディレクトリの親に設定されていない可能性があります。アプリを本番環境でどのように起動していますか?どのような出力から得られますか

console.log(process.cwd());
于 2012-05-05T06:07:27.557 に答える
3

Mark Besseyが彼の回答で述べているroutesように、メインスクリプトが存在する場所に関連するのではなく、現在のディレクトリからディレクトリを解決しています。おそらくを使用する必要があります__dirnameドキュメントから:

現在実行中のスクリプトが存在するディレクトリの名前。

fs.readdirSync(path.join(__dirname, "routes"))

また、合格する必要はありません'utf8'また、コード内の 関数の使用には十分注意しSyncてください。通常、サーバーがリクエストの受け入れを開始する前は、トップレベルのスコープで問題ないため、この場合は問題ありません。

于 2012-05-05T11:00:55.790 に答える