我的路线设置如下:
app.use('/', index);
app.use('/auth', auth);
app.use(RequestHandlers.Authorize);
app.post('/users', users);
// catch 404 and forward to error handler
app.use(RequestHandlers.NotFound);
我的处理程序:
export function Authorize(req: Request, res: Response, next: Function) {
// check header or url parameters or post parameters for token
var token = req.body.token || req.query.token || req.headers['x-access-token'];
//token logic
};
export function NotFound(req: Request, res: Response, next: Function) {
var err: any = new Error('Not Found');
err.status = 404;
next(err);
}
所以我没有问题来处理任何已定义的路由,但是当我访问任何不存在的路由时,RequestHandlers.Authorize
总是首先被执行。但如果路线不存在,我想解雇app.use(RequestHandlers.NotFound);
我该怎么做?没有在路线上放置太多自定义逻辑的最佳方法是什么?可能有检查路由是否已定义的方法?
答案 0 :(得分:4)
当您执行app.use(fn)
时,您说“将此中间件功能用于每个请求”。
看到您只希望authorize
函数在特定路由上运行,您应该使用以下方法将其添加到这些路由中:
app.get('/', middleware, fn)
...对于您的具体示例:
app.get('/', RequestHandlers.Authorize, index)
app.get('/users', RequestHandlers.Authorize, users)
创建路径时的middleware
参数可以是function (req, res, next)
,也可以是函数数组。
此处有更多信息:http://expressjs.com/en/guide/routing.html#route-handlers