在不使用req.params.id的情况下为该用户创建发布请求时,如何获取登录的用户ID?

时间:2019-05-15 01:43:24

标签: node.js express post mongoose

假设我有一个带有/ posts端点的API。我的Mongoose模式中的每个帖子都有对创建它的用户的引用,每个用户都有对他们创建的帖子的引用数组。

以登录用户身份发布时,为了保存该引用,我需要将当前登录用户ID以及该帖子的内容发送到/ posts端点。我不希望通过/ users /:id / posts之类的嵌套查询来这样做,然后发送req.params.id。我想直接发布到/ posts,但是以某种方式发送user.id。

用户模型:

const UserSchema = new Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true,
    unique: true
  },
  password: {
    type: String,
    required: true
  },
  posts: [{
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Post'
  }]
});

帖子模型:

const PostSchema = new Schema({
  content: {
    type: String,
    required: true
  },
  created: {
    type: Date,
    default: Date.now
  },
  user: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User'
  }
});

创建新帖子(需要一种获取用户ID的方法,因为它实际上不在req.params中)

exports.createPost = async function(req, res, next) {
  try {
    const { content } = req.body; // ideally would get user ID from here
    const post = await db.Post.create({
      content,
      user: req.params.id
    });
    const postUser = await db.User.findById(req.params.id);
    postUser.posts.push(post.id);
    await postUser.save();
    const newPost = await db.Post.findById(post.id); 
    const {id, created} = newPost;
    return res.status(201).json({
      id,
      content,
      created
    })
  }
  catch(err) {
    return next(err);
  }
}

我知道我可能遗漏了一些明显的东西,但是我很感谢任何建议。

0 个答案:

没有答案