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

如何在Node.js+Express+Handlebars(hbs)项目中路由访问静态HTML页面

问题原因
  • res.render() 是Express用于调用模板引擎渲染动态模板的专属方法,只会从你通过app.set("views", 路径)指定的视图目录,查找匹配你配置的.hbs后缀的模板文件。你要访问的项目2是纯静态HTML文件,不需要走Handlebars渲染逻辑,所以用res.render()会直接报找不到视图的错误。
  • 你已经配置了express.static托管public目录下的静态资源,完全可以直接返回静态HTML文件,不需要走模板渲染链路。
解决方法

方案1:用res.sendFile直接返回静态HTML(最适配你的需求)

把出错的/project2路由代码替换为以下内容即可:

router.get('/project2', (req, res, next) => {
    // 注意确认你的静态HTML文件后缀是.html,路径和实际存放位置一致
    const project2HtmlPath = path.join(__dirname, 'public', 'views', 'fountainWebsite', 'html', 'home.html');
    res.sendFile(project2HtmlPath);
});

方案2:直接走静态资源托管规则,无需单独配置路由

你已经配置了app.use("/public", express.static(path.join(__dirname, "public"))),直接通过路径/public/views/fountainWebsite/html/home.html就可以直接访问项目2页面,不需要单独写路由逻辑。

可选优化建议

你当前渲染Handlebars模板时每次都要写../public/views/前缀,建议调整视图目录配置简化代码:

// 把原配置 app.set("views", path.join(__dirname, "views")); 替换为下面的内容
app.set("views", path.join(__dirname, "public", "views"));

修改后渲染hbs模板时不需要再加路径前缀,比如首页可以直接写res.render('index', {title: 'Home Page', css:['/public/css/style.css'], js:['/public/js/navBar.js']}),代码更简洁也不容易出现路径错误。

内容的提问来源于stack exchange,提问作者Tasi Tele

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:06:01