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

Handlebars表达式未解析:href无法识别MongoDB的{{_id}}问题

解决Handlebars中href无法识别{{_id}}变量的问题

我来帮你排查这个问题,你在Handlebars的each循环里遇到href不识别{{_id}}的情况,大概率是这几个原因导致的,咱们一步步来解决:

  • 先确认数据里是否真的存在_id字段
    首先得确保后端传给模板的notes数组里,每个对象确实带有_id属性。你可以在循环里临时加一行测试代码,比如<p>当前ID: {{_id}}</p>,看看页面上能不能正常显示出ID。如果没显示,那就是后端传递数据的时候没把_id带过来——得去检查后端查询MongoDB的代码,是不是用了select之类的方法把_id排除了,或者查询结果里根本没有这个字段。

  • 检查Handlebars的上下文是否正确
    在{{#each notes}}循环内部,理论上上下文已经切换到单个note对象了,但有时候可能会出现上下文混淆的情况。你可以试着把{{_id}}改成{{this._id}},明确指定从当前循环的对象里取_id,也就是把href改成:

    <a href="/notes/{{this._id}}/edit"><i class="fas fa-edit"></i></a>
    

    这样能强制Handlebars锁定当前上下文,避免变量查找出错。

  • 检查字段名的大小写
    注意MongoDB的_id是全小写的,你有没有不小心写成{{_Id}}或者{{ID}}?另外我看到你代码里用了{{ Description }}(首字母大写),如果你的MongoDB字段名是小写的description,这里也会显示异常——字段名的大小写要和后端数据严格对应,这个细节很容易忽略。

  • 确认模板渲染的变量名是否匹配
    如果你用的是Express+Handlebars,要确保后端是正确把notes数组传给模板的,比如:

    res.render('notes/index', { notes: notesFromDB });
    

    这里的notes要和模板里{{#each notes}}的变量名完全一致,不能写错。

如果还是不行,你可以在循环里加{{log this}},然后打开浏览器控制台,就能看到每个note对象的所有属性,直观确认_id是否存在以及它的格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 15:42:30