如何在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
相关产品推荐
相关产品推荐

