后期方法后表达中间件

时间:2018-06-24 19:47:34

标签: node.js express

我有一个由Angulars Framework Express构建的小型API。 对于我的大多数路由器,我使用身份验证中间件。但是,用于登录或注册的中间件无法工作。根据我的知识,我可以按等级进行。但这仅适用于get方法:

//result: success:true (rcode: 200)
app.get('/test',function(req,res, next){
   res.json({success:true});
}
//result: success:false (rcode: 403)
app.post('/test',function(req,res, next){
   res.json({success:true});
}
app.use(function(req,res,next){
    var token = req.body.token || req.query.token || req.headers['x-access-token'];
    if(token) { ... } else {return res.status(403).send({success:false});}
}
//result: success:false (rcode: 403)
app.get('/test2',function(req,res, next){
   res.json({success:true});
}

发布是否需要更多时间,并且由于nodejs异步体系结构,中间件首先运行,还是为什么我获得的post方法也响应代码403? 以及在没有中间件的情况下如何分隔路由?

1 个答案:

答案 0 :(得分:0)

这应该有效:

为您的身份验证功能创建一个功能-在这种情况下为authMiddleware。在需要身份验证的所有路径中使用此中间件(例如本示例中的最后一个)

const express = require('express')
const app = express()

let authMiddleware = function (req, res, next) {
  var token = req.body && req.body.token ? req.body.token : (req.query && req.query.token ? req.query.token : req.headers['x-access-token']);
  if (token) {
    // ... your additional code ...
    return next()
  } else {
    return res.status(403).send({ success: false });
  }
}

app.get('/test', function (req, res, next) {
  res.json({ success: true });
})

app.post('/test', function (req, res, next) {
  res.json({ success: true });
})

// protected route
app.get('/test2', authMiddleware, function (req, res, next) { 
  res.json({ success: true });
})

app.listen(3000)