Javascript 在express路由器的每个子端点上添加身份验证检查

Javascript 在express路由器的每个子端点上添加身份验证检查,javascript,express,express-router,Javascript,Express,Express Router,我有一个快速路由器,我只希望授权用户访问该路由器的路由。我正在使用passport中间件。因此,我可以在每个端点中添加一个对req.user的检查,如: router.get(“/”,异步(req,res)=>{ 如果(!请求用户){ 返回res.sendStatus(401).send({message:“Unauthorized”}); } //逻辑 res.sendStatus(200).send({message:“OK”}) });您可以将行为分解到“中间件”中,并通过将其传递到路由

我有一个快速路由器,我只希望授权用户访问该路由器的路由。我正在使用passport中间件。因此,我可以在每个端点中添加一个对
req.user
的检查,如:

router.get(“/”,异步(req,res)=>{
如果(!请求用户){
返回res.sendStatus(401).send({message:“Unauthorized”});
}
//逻辑
res.sendStatus(200).send({message:“OK”})

});您可以将行为分解到“中间件”中,并通过将其传递到
路由器来为路由器的每条路由装载它。use()

在这种特殊情况下,在Passport one之后装载
IsAuthorizedAdminware
非常重要,这样它就不会提前拒绝每个请求


中间件文档:

正在工作,但我收到一个错误
在发送到客户端后无法设置标题
我认为您还需要使用
状态
而不是
发送状态
,因为
发送状态
已经发送了一个主体:ohh,非常感谢它现在已修复。我实际上是在使用status,但idk为什么我在这里写sendStatus..再一次thanks@AmanKumar,请注意,其中间件中的express“json”方法也会发送响应。所以有时候实现中间件需要一些额外的技巧,比如重写“json”方法,但身份验证不需要这些技巧
function isAuthorizedMiddleware (req, res, next) {  
  if (!req.user) {
    return res.status(401).send({ message: "Unauthorized" });
  }
  next();
}

router.use(isAuthorizedMiddleware);

router.get("/", async (req, res) => {
  //logic 
  res.status(200).send({message: "OK"})
});