Javascript 使用EJS显示对象属性时出现问题

Javascript 使用EJS显示对象属性时出现问题,javascript,node.js,express,object,ejs,Javascript,Node.js,Express,Object,Ejs,我正在尝试在我的应用程序的评论中,在ejs模板中插入作者的用户名 以下标签: 按预期工作,输出: {u id:5eff6793e7f2681e848ceb1,用户名:'mike',{u v:0} 但是,添加用户名属性,即此标记: 这是来自相应控制器的代码: async postShow(req, res, next){ let post = await Post.findById(req.params.id).populate({ path: 'reviews', op

我正在尝试在我的应用程序的评论中,在ejs模板中插入作者的用户名

以下标签:

按预期工作,输出:

{u id:5eff6793e7f2681e848ceb1,用户名:'mike',{u v:0}

但是,添加用户名属性,即此标记:

这是来自相应控制器的代码:

async postShow(req, res, next){

  let post = await Post.findById(req.params.id).populate({
    path: 'reviews',
    options: { sort: { '_id': -1 } },
    populate: {
      path: 'author',
      model: 'User'
    }
  });
  res.render('posts/show', { post });
},
输出nada。我是个新手,但我不知道为什么我会在这个看似简单的问题上遇到麻烦。我哪里会出错

谢谢

用于返回对象而不是mongoose文档

let post = await Post.findById(req.params.id).lean().populate({
    path: 'reviews',
    options: { sort: { '_id': -1 } },
    populate: {
      path: 'author',
      model: 'User'
    }
  });
  res.render('posts/show', { post });
},
用于返回对象而不是mongoose文档

let post = await Post.findById(req.params.id).lean().populate({
    path: 'reviews',
    options: { sort: { '_id': -1 } },
    populate: {
      path: 'author',
      model: 'User'
    }
  });
  res.render('posts/show', { post });
},

上述操作不起作用,因为author的内容(Schema.Types.ObjectId,引用用户模型)包含在多余数组中的对象中:

移除阵列修复了该问题。我不知道最初为什么会包括在内。更正:

const ReviewSchema = new Schema({
  body: String,
  rating: Number,
  author: {
      type: Schema.Types.ObjectId,
      ref: 'User'
    }
});

上述操作不起作用,因为author的内容(Schema.Types.ObjectId,引用用户模型)包含在多余数组中的对象中:

移除阵列修复了该问题。我不知道最初为什么会包括在内。更正:

const ReviewSchema = new Schema({
  body: String,
  rating: Number,
  author: {
      type: Schema.Types.ObjectId,
      ref: 'User'
    }
});

只是瞎猜:您没有将对象传递给模板。你在传递一份猫鼬文件。在将文档传递到模板之前,请尝试对文档执行
.toObject()
,您可以执行
res.render('posts/show',{post:post.toObject()}),但斯文的解决方案更好。它做同样的事情,我可能会做一个
console.log(post)
就在
res.render…
之前,查看我是否获得了该对象中预期的属性,如果获得了,只是为了确保它是一个实际的对象,请执行
console.log(“构造函数是”,post.constructor.name)(应该是
对象
)。如果这些都是好的,我会检查我在模板中使用的路径是否正确,但它们似乎是正确的,因为您可以获得
review.author
来打印某些内容。或者是
post.author.username
?我会自己回答-我移除了对象周围的数组,它工作正常。我觉得自己像个白痴。谢谢@blexDon,我不觉得自己是人类,我们都是人类。人类会犯错;)只是瞎猜:您没有将对象传递给模板。你在传递一份猫鼬文件。在将文档传递到模板之前,请尝试对文档执行
.toObject()
,您可以执行
res.render('posts/show',{post:post.toObject()}),但斯文的解决方案更好。它做同样的事情,我可能会做一个
console.log(post)
就在
res.render…
之前,查看我是否获得了该对象中预期的属性,如果获得了,只是为了确保它是一个实际的对象,请执行
console.log(“构造函数是”,post.constructor.name)(应该是
对象
)。如果这些都是好的,我会检查我在模板中使用的路径是否正确,但它们似乎是正确的,因为您可以获得
review.author
来打印某些内容。或者是
post.author.username
?我会自己回答-我移除了对象周围的数组,它工作正常。我觉得自己像个白痴。谢谢@blexDon,我不觉得自己是人类,我们都是人类。人类会犯错;)我很感激你的回答,但我仍然看到同样的结果。你的帖子对象是什么样子的?你还可以展示你的模板的一个片段吗?我是个白痴,作者的内容是一个不必要的数组。谢谢你的帮助我很感激你的回答,但我仍然看到同样的结果。你的帖子对象是什么样子的?你还可以展示你的模板的一个片段吗?我是个白痴,作者的内容是一个不必要的数组。谢谢你的帮助