我想打印记录的用户ID,名称,电子邮件从后端使用hbs我使用MongoDB,但值不打印,但循环正在工作。
<h1 class="display-1 text-center text-danger">WELCOME ADMIN</h1>
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">ID</th>
<th scope="col">NAME</th>
<th scope="col">EMAIL</th>
</tr>
</thead>
<tbody>
{{#each userArray}}
<tr>
<td>{{@key}}</td>
<td>{{this._id}}</td>
<td>{{this.name}}</td>
<td>{{this.email}}</td>
</tr>
<script>
var namee = {{this.name}}
if (namee) {
console.log("Name:", namee);
}
</script>
{{/each}}
</tbody>
</table>
路由器:
var express = require('express');
var router = express.Router();
const userReg= require("../models/data")
router.get('/', async(req, res)=> {
try{
const userRegList = await userReg.find({});
console.log("user count :"+userRegList.length);
res.render('admin',{userArray:userRegList});
console.log(userRegList)
}catch(err){
console.log(err);
}
});
module.exports = router;
产品型号:
const mongoose = require("mongoose");
const personSchema=mongoose.Schema({
name:String,
email:String,
password:String,
repassword:String,
birthday:Date,
phonenumber:String,
address:String
});
var Person = mongoose.model("person",personSchema);
module.exports = Person//PersonalData
数据在控制台中正确打印,例如。当使用console.log(userRegList)
时,它不会显示,但当我在模板文件中使用{{#each userArray.[0]}}
时,它不会显示。它显示了第一个userdata
,但为什么没有打印完整的值?帮帮我!!
1条答案
按热度按时间fhg3lkii1#
这是因为默认情况下,在Handlebars >= v4.6.0中,运行时禁止访问上下文对象的原型属性和方法。Handlebars仍将在数组中循环,但将阻止它访问属性值。
你可以覆盖这个设置,你可以在这里阅读更多,但它的存在是为了保护你的系统免受恶意行为者试图利用安全漏洞,所以我建议你不要覆盖它。
正如用户@76484所提到的,mongoose有一个简单的
lean()
方法,你可以链接到任何你可能需要传递到你的搜索栏视图的查询。这将返回POJO,而不是Mongoose文档类的示例,因此可以在Handlebars视图中使用而不会遇到此问题。默认情况下,Mongoose查询返回Mongoose Document类的示例。文档比普通的JavaScript对象要重得多,因为它们有很多内部状态用于更改跟踪。启用lean选项会告诉Mongoose跳过示例化完整的Mongoose文档,而只是给予POJO。
试试这个:
巧合的是,使用
lean()
将有加速应用程序的额外好处,因为:在后台,在执行查询之后,Mongoose将查询结果从POJO转换为Mongoose文档。如果你打开了倾斜选项,Mongoose会跳过这一步。