创build一个接受参数的expressjs中间件
我正在尝试创build一个可以接受参数的中间件。 如何才能做到这一点?
例
app.get('/hasToBeAdmin', HasRole('Admin'), function(req,res){ }) HasRole = function(role, req, res, next){ if(role != user.role){ res.redirect('/NotInRole); } next(); }
function HasRole(role) { return function(req, res, next) { if (role !== req.user.role) res.redirect(...); else next(); } }
我也想确保我不会做同一个函数的多个副本:
function HasRole(role) { return HasRole[role] || (HasRole[role] = function(req, res, next) { if (role !== req.user.role) res.redirect(...); else next(); }) }
或者,如果您没有太多情况,或者angular色不是string:
function HasRole(role) { return function(req, res, next) { if (role !== req.user.role) res.redirect(...); else next(); }) } var middlware_hasRoleAdmin = HasRole('admin'); //define router only once app.get('/hasToBeAdmin', middlware_hasRoleAdmin, function(req,res){ })
如果你有不同的权限级别,你可以像这样构造它们:
const LEVELS = Object.freeze({ basic: 1, pro: 2, admin: 3 }); /** * Check if user has the required permission level */ module.exports = (role) => { return (req, res, next) => { if (LEVELS[req.user.role] < LEVELS[role]) return res.status(401).end(); return next(); } }
app.get('/hasToBeAdmin', function(req, res, next){ hasRole(req, res, next, 'admin'); }, function(req,res){ // regular route }); var hasRole = function(req, res, next, role){ if(role != user.role){ res.redirect('/NotInRole'); } next(); };
- 在JavaScript项目中使用NODE_ENV和多个环境
- 使用hbs和获取“path.join的参数必须是string”的错误?
- 用express.jsdynamic加载路由
- Express Node.js框架:如何通过replace一个命名的参数段来重新编写一个URL?
- 如何删除特定的数据mongodb + nodejs + expressjs
- 如何在NodeJS中执行redirect,如.htaccess文件?
- 你能用Mongoose中的实例方法search其他模型吗?
- Nodejs,Express – 尝试从请求对象获取客户端IP – 显示127.0.0.1
- Express.js服务传统链接(.php)