节点快递订单路线

时间:2016-02-08 10:16:37

标签: node.js express routes

我的路线设置如下:

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);

我该怎么做?没有在路线上放置太多自定义逻辑的最佳方法是什么?可能有检查路由是否已定义的方法?

1 个答案:

答案 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