DRY in Nodejs Express

DRY in Nodejs Express

本文关键字:Express Nodejs in DRY      更新时间:2023-09-26

我在Node.js中遵循DRY有一点问题。如何在不同的路由上使用csrf,而不需要在需要csrf令牌的不同地方复制粘贴代码?

app.js(主入口点)

var csrf = require('csurf');
var csrfProtection = csrf({cookie: false});
//routes
var route1 = require('./app/routes/r1');
app.use('/', route1);
var route2 = require('./app/routes/r2');
app.use('/dashboard', r2);

我想在两个路由上使用csrfProtection,但不确定如何在每个文件r1.js和r2.js中添加下面的代码

var csrf = require('csurf');
var csrfProtection = csrf({cookie: false});
routes.get('/login', csrfProtection, function(req,res){
    res.render('login', {csrfToken: req.csrfToken()});
});

好的。我明白了。需要重构我的代码在app.js

var csrf = require('csurf');
var csrfProtection = csrf({cookie: false});
var route1 = express.Router();
require('./app/routes/r1')(route1, csrfProtection);
app.use('/', route1);
var route2 = express.Router();
require('./app/routes/r2')(route2, csrfProtection);
app.use('/dashboard', route2);

then in my routes (r1.js)

module.exports = function(router, csrfProtection){
    router.get('/login', csrfProtection, function(req,res){
        res.render('login', {csrfToken: req.csrfToken()});
    });
}

我也可以在我的其他路由中使用它