我是使用把手的新手,并努力找出为什么我想要的 html 根本无法渲染。车把似乎只会扔给我空白页。
我怀疑这与 {{{body}}} 标签没有被车把包作为术语有关。
这是我的代码的样子:
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>
和仪表板.hbs
---
layout: 'main'
---
<h1>Dashboard</h1>
超级简单。我只是希望它在 localhost:3000/dashboard 处以 h1 字体呈现“仪表板”,但它在该地址上根本不返回任何内容。这并不是说该地址无效 - 只是没有 HTML 能够通过。
我尝试了所有基本的故障排除方法。这是我的文件夹和文件的列表。
知道发生什么事了吗?
您没有使用
exphbs
导入。您实际上导入了 express
两次,第二次将其分配给变量 engine
。但你想要的engine
是由express-handlebars
导出的。因此,您应该删除第二个 express
导入并解构 epxress-handlebars
导入,以便获得对正确 engine
的引用:
const express = require('express')
const { engine } = require('express-handlebars')