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

正如 Mark Bessey 在他的回答中所说,您正在routes从当前目录解析目录 - 与您的主脚本所在的位置无关。您可能应该使用__dirname. 从文档

当前执行的脚本所在目录的名称。

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

此外,您不需要通过'utf8'. 此外,在代码中使用任何 函数时都要非常小心Sync——通常,在服务器开始接受请求之前,在顶级范围内是可以的,所以在这种情况下应该没问题。

于 2012-05-05T11:00:55.790 回答
3

在生产中,当前目录似乎没有设置为“路由”目录的父目录。您如何在生产环境中启动您的应用程序?你得到什么输出

console.log(process.cwd());
于 2012-05-05T06:07:27.557 回答