表示中间件受保护和不受保护的路由

我有一些/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);