【问题标题】:Cannot populate author in blog post MERN stack using JWT无法使用 JWT 在博客文章 MERN 堆栈中填充作者
【发布时间】:2020-05-18 06:04:06
【问题描述】:

我正在尝试创建一个使用 MERN 堆栈和 JWT 进行身份验证的博客站点。

我的用户模型是这样的:

const mongoose = require("mongoose");
const { Schema } = mongoose;

const UserSchema = Schema({
  name: String,
  username: String,
  password: String,
  posts: [{ type: Schema.Types.ObjectId, ref: "Blog" }]
});

module.exports = mongoose.model("User", UserSchema);

我的博客模型如下所示:

const mongoose = require("mongoose");
const { Schema } = mongoose;

const BlogSchema = Schema({
  title: String,
  content: String,
  date: { type: Date, default: Date.now },
  author: { type: Schema.Types.ObjectId, ref: "Blog" }
});

module.exports = mongoose.model("Blog", BlogSchema);

我正在使用 JWT 来验证 创建新博客路由。 登录时,我将使用当前用户的 ID 和名称作为有效负载向客户端发送 JWT 令牌。 如果从反应前端发送的令牌是有效的,那么我在验证 JWT 时将用户的 id 添加到 req 对象。 IE。 req 对象将有一个 user_id 字段以及标题、正文和其他字段

创建新的帖子路线如下所示:

blog.post("/", authenticateUsingJwt, (req, res) => {
  // Validating the req.body object
  const newPost = new Blog({
    title: req.body.title,
    content: req.body.content,
    author: req.user_id
  });

  newPost.save();
});

当我使用我的 mongodb shell 并查看我的用户集合时,我看到 posts[] 是一个空数组。 如何解决这个问题以便我可以使用填充?

User.findOne({ username: "existingUserInDatabase" })
  .populate("Blog")
  .then(user => res.send(user))
  .catch(err => console.log(err));

此代码从数据库返回用户,但 posts[] 是一个空数组。

【问题讨论】:

    标签: mongoose jwt mongoose-populate


    【解决方案1】:

    您需要使用博客而不是博客来填充。

    User.findOne({ username: "existingUserInDatabase" })
      .populate("blogs")  //not "Blog"
      .then(user => res.send(user))
      .catch(err => console.log(err));
    

    【讨论】:

    • @user10822859 你检查了这个答案吗?请提供一些反馈。
    • 抱歉耽搁了这么久。是的,我确实检查过。我必须填充一个字段名称。就我而言,它是帖子。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-28
    • 2017-01-01
    • 2017-03-28
    • 2019-02-24
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多