【发布时间】:2016-01-12 18:17:55
【问题描述】:
我在/users 下有一些需要身份验证令牌的路由,而有些则不需要。为了实现这一点,我做了以下工作。
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”的行中找到了下一个 /users 定义。
解决此问题的推荐方法是什么?
对于每个资源,我希望每个路由都有不同的中间件。
POST /users (no auth)
GET /users (requires auth)
DELETE /users/{id} (requires auth and admin access)
【问题讨论】:
-
如果你有处理错误的中间件,你试过
next( new Error('crap') )等 -
是的,中间件按预期工作以处理错误。
标签: node.js express middleware