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

ExpressJS使用Mongoose渲染Dashboard时无法渲染用户ID问题

问题根因

Mongoose 调用find查询返回的结果默认是 Mongoose 文档实例,而非普通 JavaScript 对象,模板引擎无法直接读取实例的内置_id属性,同时_id本身是 ObjectId 类型,未转字符串也会导致渲染异常。

可用解决方案

方案一:查询时返回普通对象(推荐)

在查询链式调用中添加lean()方法,直接返回纯 JS 对象,同时还能提升查询性能,修改路由代码如下:

/* GET Dashboard page. */
router.get('/dashboard', ensureAuthenticated, (req, res) => {
  User.find({}).lean().exec(function(err, users) {
    res.render('dashboard/index.hbs', {
      pageTitle: 'Dashboard',
      total: users.length,
      users: users
    });
  });
});

方案二:模板中手动转换类型

如果不需要修改查询逻辑,直接在模板中对_id调用toString()方法转成字符串即可:

<a href="/dashboard/users/{{_id.toString()}}">My profile</a>

方案三:遍历用户列表时指定作用域

如果你是在遍历users数组渲染所有用户条目,需要明确指定当前循环项的作用域,示例代码如下:

{{#each users}}
  <a href="/dashboard/users/{{this._id}}">{{this.username}}</a>
{{/each}}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:24:04