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

Handlebars无法渲染HTML,Express环境下页面空白问题求助

Handlebars页面空白问题排查与解决

我刚接触Handlebars,目前遇到HTML完全无法渲染、页面仅显示空白的问题,怀疑是{{{body}}}标签未被Handlebars包识别。访问localhost:3000/dashboard时仅返回空白页面(路由有效),以下是相关代码及文件结构说明:

主文件代码

const express = require('express')
const engine = require('express')
const exphbs = require('express-handlebars')

//Load config
dotenv.config({ path: './config/config.env'})

const app = express()

if (process.env.NODE_ENV === 'development') {
  app.use(morgan('dev'))
}

//Handlebars
app.engine('.hbs', engine({ defaultLayout: 'main', extname: '.hbs'}))
app.set('view engine', '.hbs')
app.set('views', './views');

// Routes
app.use('/', require('./routes/index'))


const PORT = process.env.PORT || 3000

app.listen(
  PORT, 
  console.log(`Server running in ${process.env.NODE_ENV} made on port ${PORT}`)
)

路由文件index.js代码

const express = require('express')
const router = express.Router()

// @Desc Login/Landing page
// @route GET /
router.get('/login', (req, res) => {
  res.render('login', {layout: 'main'})
})

//@Desc Dashboard
// @route GET /dashboard
router.get('/dashboard', (req, res) => {
  res.render('dashboard', {layout: 'main'})
})

module.exports = router

主布局文件main.hbs代码

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name = "viewport" content="width=device-width, initial-scale=1.0"
    <title>FW Pre-Call-Script Generator</title>
  </head>
  <body>
     {{{body}}}
  </body>
</html>

仪表盘文件dashboard.hbs代码

---
layout: 'main'
---
<h1>Dashboard</h1>

文件结构符合Express+Handlebars常规布局。


问题根源与修复步骤

1. 引擎初始化错误

主文件里错误地将express赋值给engine变量,正确做法是使用exphbs提供的引擎方法:

// 原错误代码
const engine = require('express')
// 修改为
const engine = exphbs.engine

或者直接在初始化时调用:

app.engine('.hbs', exphbs.engine({ defaultLayout: 'main', extname: '.hbs'}))

2. 视图文件的无效语法

dashboard.hbs开头的--- layout: 'main' ---是静态站点生成器的语法,Express-Handlebars不支持,直接删除这部分即可——你已经在路由的res.render里指定了布局。

修改后的dashboard.hbs:

<h1>Dashboard</h1>

3. 依赖检查

确保已安装所有必需依赖:

npm install express express-handlebars dotenv morgan

完成以上修改后重启服务,访问localhost:3000/dashboard就能正常显示标题内容了。

内容的提问来源于stack exchange,提问作者Satvik Agnihotri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:40:18