如何在 node.js 中使用 request.profile?

问题描述

我遇到了一个使用 req.profile 读取数据的代码。这怎么可能?

const listNewsFeed = async (req,res) => {
  let following = req.profile.following
  following.push(req.profile._id)
  try{
    let posts = await Post.find({postedBy: { $in : req.profile.following } })
                          .populate('comments.postedBy','_id name')
                          .populate('postedBy','_id name')
                          .sort('-created')
                          .exec()
    res.json(posts)
  }catch(err){
    return res.status(400).json({
      error: errorHandler.getErrorMessage(err)
    })
  }
}

回购链接https://github.com/shamahoque/mern-social/blob/second-edition/server/controllers/post.controller.js

解决方法

键是 middleware。在 Express 中,在请求到达路由处理程序(您所引用的对象)之前,它可以通过一系列中间件,这些中间件可以添加或修改请求或响应对象。

Here 是它设置 req.profile 的地方:

const userByID = async (req,res,next,id) => {
  try {
    let user = await User.findById(id).populate('following','_id name')
    .populate('followers','_id name')
    .exec()
    if (!user)
      return res.status('400').json({
        error: "User not found"
      })
    req.profile = user
    next()
  } catch (err) {
    return res.status('400').json({
      error: "Could not retrieve user"
    })
  }
}