Express 中间件受保护和不受保护的路由
Express middleware protected and unprotected routes
我在 /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)
当我从 POST 到 /users
时,它运行预期的路线,但是当调用 next()
时,protected_middleware
运行。发生这种情况是因为它在标有 'D'.
的行找到下一个 /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);
我在 /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)
当我从 POST 到 /users
时,它运行预期的路线,但是当调用 next()
时,protected_middleware
运行。发生这种情况是因为它在标有 'D'.
/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);