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
相关产品推荐
相关产品推荐

