表示中间件受保护和不受保护的路由
我有一些/users
下的路线,我想要求一个身份validation令牌和一些我不。 为了做到这一点,我做了以下。
var protected = express.Router(); var unprotected = express.Router(); unprotected.post('/', function(req, res, next) { // A // no auth required next(); }); protected.get('/', function(req, res, next) { // B // auth required next(); }); module.exports = { protected: protected, unprotected: unprotected };
然后我用下面的方法安装这些路线。
var users = require('./routes/users'); app.use('/users', unprotected_middleware, users.unprotected); // C app.use('/users', protected_middleware, users.protected); // D app.use(resultHandler); // Middleware for sending the response (all routes) app.use(errorHandler); // Middleware for handling errors (all routes)
当我向/users
POST时,它会运行预期的路由,但是当next()
被调用时, protected_middleware
运行。 发生这种情况是因为它在标有'D'的行中find下一个/users
定义。
什么是推荐的方法来解决这个问题?
对于每个资源,我希望每个路由具有不同的中间件。
POST /users (no auth) GET /users (requires auth) DELETE /users/{id} (requires auth and admin access)
在这里你不需要两个独立的路由器,只要使用中间件进行保护和不受保护(在路由器的get / post函数中):
users.js:
var router = express.Router(); router.post('/', unprotected_middleware, function(req, res, next) { // A // no auth required next(); } ); router.get('/', protected_middleware, function(req, res, next) { // B // auth required next(); } ); module.exports = router;
接着:
var users = require('./routes/users'); app.use('/users', users); app.use(resultHandler); // Middleware for sending the response (all routes) app.use(errorHandler);