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

Express+Handlebars渲染空内容且仅显示2个空块问题求助

问题分析与修复方案

问题根源

1. 未执行数据库查询,直接传递模型对象

首页路由中res.render('index', {data: articles})的articles是Mongoose的模型构造函数,不是从数据库查询得到的文章数据数组。Handlebars遍历这个模型对象时,实际是遍历它的内置属性,这就是页面显示2个空块(对应模型内部属性)、且无法获取title/content字段的核心原因。

2. 模型校验规则拼写错误

模型中content字段的必填校验写成了require: true,正确写法应为required: true。虽然当前数据存储正常,但如果提交空内容时会跳过校验,存在数据完整性风险。

修复代码

1. 修改路由代码(执行数据库查询)

const { Router } = require('express')
const Article = require('../models/articles')
const router = Router()

// 首页路由:异步查询所有文章
router.get('/', async (req, res) => {
    try {
        // 从MongoDB查询所有文章文档
        const articles = await Article.find({})
        res.render('index', {data: articles})
    } catch (err) {
        console.error(err)
        res.status(500).send('服务器错误')
    }
})

router.get('/post', (req, res) => {
    res.render('post', {isPost: true})
})

router.post('/post', async (req, res) => {
    try {
        const article = new Article({
            title: req.body.title,
            content: req.body.content
        })
        await article.save()
        res.redirect('/')
    } catch (err) {
        console.error(err)
        res.status(400).send('提交失败')
    }
})

module.exports = router

2. 修正模型代码的拼写错误

const { Schema, model } = require('mongoose')

const schema = new Schema({
    title: {
        type: String,
        required: true
    },
    content: {
        type: String,
        required: true // 修正require为required
    }
})

module.exports = model('Article', schema)

修复效果

修改后,首页路由会从MongoDB中查询所有文章数据,将真实的文档数组传递给Handlebars模板。模板遍历数组时,就能正确读取每个文章的title和content字段,渲染出所有完整的文章内容,不会再出现空块。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:40:26