You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Linux上Express应用Handlebars.js视图模板查找失败问题

解决Express+Handlebars在EC2 Amazon Linux上的视图查找失败问题

问题概况

部署采用Handlebars.js模板引擎的Express应用到EC2 Amazon Linux实例时,服务器启动正常且能连接数据库,但浏览器访问时出现错误:Failed to lookup view "homepage" in views directory "/views"。该应用在本地及Heroku平台运行正常,问题在配置nginx反向代理前就已存在,推测与systemd服务配置有关。

核心原因

Express默认会从当前工作目录下的views文件夹查找模板文件。本地和Heroku启动应用时,工作目录就是项目根目录,因此能正确找到views文件夹;但通过systemd启动时,默认工作目录为根目录/,导致Express尝试在/views下查找模板,而实际模板文件位于/home/ec2-user/lightbox/views,因此出现查找失败。

解决方案

以下两种方法任选其一即可:

方法1:显式指定Express视图目录(推荐)

在server.js中添加代码,明确指定views目录的绝对路径,不受工作目录影响:

// 在设置view engine之后添加
app.set('views', path.join(__dirname, 'views'));

修改后的server.js相关片段:

// handlebars init
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
// 新增:显式指定视图目录
app.set('views', path.join(__dirname, 'views'));

方法2:配置systemd服务的工作目录

在/etc/systemd/system/lightbox.service的[Service]段中添加WorkingDirectory,指定项目根目录:

[Service]
ExecStart=/usr/bin/node /home/ec2-user/lightbox/server.js
# 新增:设置工作目录为项目根目录
WorkingDirectory=/home/ec2-user/lightbox
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=Lightbox
User=ec2-user
EnvironmentFile=/home/ec2-user/lightbox/lightbox.env

修改后需要重新加载systemd配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart lightbox.service

验证方式

可在server.js中添加日志打印,确认视图目录路径是否正确:

// 在设置views目录后添加
console.log('当前视图目录:', app.get('views'));

启动应用后查看日志(通过journalctl -u lightbox.service),确认路径为/home/ec2-user/lightbox/views即可。

内容的提问来源于stack exchange,提问作者Finn Phillips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 23:45:55