如何有条件地包含Express的子应用程序?

时间:2017-04-09 13:09:03

标签: node.js express

我在我的应用程序中使用了名为Grant的库。以前我按照上面链接的自述文件中的示例包含它,但是我现在需要有条件地包含它,而我似乎无法使其工作。

之前的工作方式

const grant = new Grant(grantConfig);
app.use(grant);

之前我已经在Express中完成了条件中间件,所以我认为包括格兰特不会有问题。

我是如何尝试的(没有工作)

const grant = new Grant(grantConfig);

app.use((req, res, next) => {
    if (someBooleanVariable) {
        next();
    } else {
        grant(req, res, next);
    }
});

所以这不起作用。我认为这可能与Grant是Express的一个实例而不仅仅是一个常规的中间件功能有关,但我不确定。您可以看到Grant的实施方式here。 Express文档说它应该被视为相同,但我也可能误解它们。

注意:我需要根据每个请求进行操作,因此采用中间件方式。

1 个答案:

答案 0 :(得分:1)

如果您只想在一部分路线上使用特定的中间件:

// On a single route:
app.get('/some/route', grant, function(req, res) {
  ...
});

// On a set of routes with a particular prefix:
app.use('/api', grant, apiRouter);

// On a specific router:
let apiRouter = express.Router();

apiRouter.use(grant);
apiRouter.get(...);