Express中间件避免静态进入下一个

时间:2016-04-06 07:41:19

标签: node.js express

我有以下功能:

app.use('/Framework', express.static(path.resolve(__dirname, 'Framework')));
app.get('/*/*', function (req, res, next) {
    ...code...
);

请求同时包含app.useapp.get。我希望当我尝试使用/Framework访问资源时,它只是将其作为静态赋予我,而忽略了下面的其他函数。然而,当访问静态时,它似乎进入了app.get。 为什么会发生这种情况?我如何修改它以获得想要的行为?

因评论而修改

我也有

app.use('/Public', express.static(path.resolve(__dirname, 'Public')));

之前按预期完美运作。 诸如/Public/0.png之类的请求在/Framework/0.png等请求同时输入这两个函数时起作用。我一遍又一遍地检查文件夹名称,它们是正确的。

1 个答案:

答案 0 :(得分:0)

Express-static是Express中间件。中间件链接在一起,在中间件执行完代码后,它在内部调用next();以允许下一个中间件执行。执行完所有中间件后,将执行路由。

由于快速静态调用next();完成后,如果任何路由与请求匹配,将调用并检查路由。由于您的请求/Public/0.png与您的路由/*/*匹配,因此路由已执行。

  • 我的建议是尝试将您的路线从/*/*重命名为更具体的路线。
  • 您可以尝试使用正则表达式来明确允许任何匹配/*/*的请求,但会拒绝任何附加了文件扩展名的路由(即/*/*.png)。
  • 另一种(hacky)方式是在执行该路由中的代码之前检查/*/*路由中的headersSent

附注:

了解您的路线名称(例如公共框架)与您的目录名称相同,您只需执行

app.use('/', express.static(path.resolve(__dirname, PARENT_DIRECTORY)));

PARENT_DIRECTORY是PublicFramework的父目录。这样

您的目录结构如下所示:

Directory
|
| ---- Public
| ---- Framework

Public的任何请求最终都会从Public目录中提供文件,对于Framework目录也是如此。