如何避免使用nodejs / express进行会话检查的冗余代码

时间:2016-05-19 11:46:33

标签: node.js express

我正在使用快递模块。

对于每条路线,我都会输入此代码(登录/注册页面除外)

if (req.session.user!='admin')
{
   res.redirect('/');
   return ;
}

有没有办法告诉快递自动调用此会话检查,除了一个特定的路由(登录页面)? 因为这给了我冗余的代码,并且有可能忘记对新路由进行检查......

3 个答案:

答案 0 :(得分:0)

你有几种方法:

  • 全局app.use条件(if(req.url === 'login/sign-up') ...
  • 两个不同的路由器用于登录/注册以及所有其他路由器。并为路由器应用中间件
  • 每个路由器的中间件(最差的方法,imho)

<强>更新

来自http://expressjs.com/en/guide/routing.html

var express = require('express');
var router = express.Router();

// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
  console.log('Time: ', Date.now());
  next();
});
// define the home page route
router.get('/', function(req, res) {
  res.send('Birds home page');
});
// define the about route
router.get('/about', function(req, res) {
  res.send('About birds');
});

module.exports = router;

然后只需致电app.use(router)。 Bescides,使用路由器是一个好主意,因为它允许按照它们的意思对路由进行分组,并像它一样使用它模块

答案 1 :(得分:0)

route.get('/somelink',function(res,res,next){ if (req.session.user!='admin') { res.redirect('/'); }else{ next(); } },function(req,res){ res.render('page'); }); 可以做你的事情,为某条路线做一个例子:

route.get('/somelink',check,function(req,res){
   res.render('page');
});

function check(req,res,next){
if (req.session.user!='admin')
{
   res.redirect('/');
}else{
  next();
}

注意您甚至可以将回调函数分开以允许可重用性

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt",
            "Effect": "Deny",
            "Action": [
                "kms:Decrypt"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "Stmt",
            "Effect": "Allow",
            "Action": "kms:Encrypt",
            "Resource": [
                "arn:aws:kms:us-east-1:11111111:key/bla-bla"
            ],
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": [
                        "12.12.12.12",
                    ]
                }
            }
        }
    ]
}

答案 2 :(得分:0)

使用middleware

// server.js
const app = expres();
app.use('/path', require('./middleware.js'));

然后在需要时使用它:

data[!apply(data == "", 1, all),]