我想打印登录的用户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

数据在控制台中打印正确,例如.当我在模板文件中使用{{#each userArray.[0]}}时,当我使用console.log(userRegList)时它没有显示.它毫无疑问地显示了前userdata个值,但是为什么没有打印出完整的值呢?帮帮我!!

推荐答案

这是因为,默认情况下,在Handlebar>;=v4.6.0中,运行时禁止访问上下文对象的原型属性和方法.Handlebar仍将在数组中循环,但将被阻止访问属性值.

您可以覆盖此设置,并且可以读取更多的here个,但它是为了保护您的系统免受试图利用安全漏洞的恶意攻击者的攻击,所以我建议您不要覆盖它.

正如User@76484所提到的,Mongoose有一个简单的方法,您可以链接到您可能需要传递给Handlebar视图的任何查询.它返回POJO,而不是Mongoose Document类的实例,因此可以在您的Handlebar视图中使用,而不会遇到这个问题.

默认情况下,Mongoose查询返回Mongoose Document类的一个实例.文档比普通的JavaScript对象重得多,因为它们有很多用于更改跟踪的内部状态.启用LINE选项会告诉Mongoose跳过实例化完整的Mongoose文档,只给您提供POJO.

试着这样做:

const userRegList = await userReg.find({}).lean();

巧合的是,使用lean()将具有加快应用程序速度的额外好处,因为:

在幕后,在执行查询之后,Mongoose将查询结果从POJO转换为Mongoose文档.如果启用精益选项,Mongoose将跳过此步骤.

Node.js相关问答推荐

如何解决无法获得本地颁发者证书的问题

正在try 使用Azure Function App上载文件时未上载文件(&Q;)

FireStore事务似乎已允许并发编辑?

在编译时强制不缩小类型范围

Prisma 和 Nextjs:重新部署之前内容不会更新

如何获取mongoose中单个id数据的记录

TypeScript Eslint警告了一个AWS客户端构造函数(dynamodb),但没有警告另一个(s3)

dayjs的isSameOrAfter方法未按预期工作

MongoDB:通过匹配输入字符串或输入字符串中的单个单词进行搜索

具有项目外部子路径导入的 Firebase 函数

mongoose findOneAndUpdate 不更新数据库

eSignature API 的 NodeJS SDK 是否支持数据流?

将 express js app.use() 移动到另一个文件

BrowserRouter工作时为什么HashRouter不工作?

无服务器无法获取所有记录事件对象验证失败?

Nodejs-console.error vs util.debug

如何使用适用于 Node.js 的 AWS 开发工具包将 Amazon S3 中的所有对象从一个前缀复制/移动到另一个前缀

如何在 Mongoose 模式中设置数组大小限制

socket.io 发出回调合适吗?

Mongoose - 验证邮箱语法