从其他目录启动Node.js/Express MVC应用时的视图文件找不到问题
问题原因与解决方案
这个问题的核心是视图目录用了相对路径,PM2从其他目录启动时,工作目录是你执行命令的目录,而非应用所在目录,导致Express错误地在当前命令目录下查找views文件夹。以下是具体解决方法:
1. 改用绝对路径设置视图目录
Node.js中的__dirname代表当前模块文件所在目录的绝对路径,结合path模块拼接,能确保无论从哪里启动,都指向应用自身的views文件夹:
const path = require('path'); // 设置视图目录为应用根目录下的views文件夹 app.set('views', path.join(__dirname, 'views')); // 如果views在子目录(比如src/views),就改成: // app.set('views', path.join(__dirname, 'src', 'views'));
同理,如果你的静态文件(public目录)也用了相对路径,同样要改成绝对路径避免同类问题:
app.use(express.static(path.join(__dirname, 'public')));
2. PM2启动时指定工作目录
如果不想修改代码,可以在PM2启动命令中用--cwd参数指定应用的工作目录,强制PM2以应用所在目录为基准执行:
pm2 start ../another_directory/my_app.js --cwd ../another_directory
更推荐用PM2配置文件(ecosystem.config.js)管理,避免每次输入长命令:
module.exports = { apps: [{ name: 'my_app', script: './my_app.js', cwd: '/完整的应用目录路径' // 比如 /home/user/projects/my_app }] };
启动时执行:pm2 start ecosystem.config.js
内容的提问来源于stack exchange,提问作者Strontium_99
相关产品推荐
相关产品推荐

