问题描述
我遇到了一个使用 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"
})
}
}