从express中的静态文件中排除子目录

Iva*_*gin 18 node.js express

有没有办法从快速 4.8.5中的快速静态中间件中排除子目录.

例如,如果我有:

app.use(express.static(__dirname + 'public'));
Run Code Online (Sandbox Code Playgroud)

我的公共目录是这样的:

- public  
   - css
   - images
   - scripts
   - index.html
   - exclude_me
        - scripts
        - views
        - index.html
Run Code Online (Sandbox Code Playgroud)

所以我需要排除最后一个子目录,当用户执行时:

GET /exclude_me
Run Code Online (Sandbox Code Playgroud)

它应该调用我的路由而不是自动返回目录.

我不能因为它依赖于它里面的东西,因为从公开目录只是将其删除公共目录角的应用和exclude_me是另一个角度的应用程序,从获取脚本/ exclude_me /脚本 /公/脚本.

我知道这有点令人困惑,但事实并非如此,我不能将其从公共目录中删除,因为它不会再看到公共/脚本需要的东西而且我不能离开它因为我当时无法授权它(所有授权都是在公共/剧本中)

如果有更聪明的方法可以做到这一点,请随时告诉我:)

Riv*_*all 16

您可以添加自己的中间件.这是我做的排除一些文件夹:

app.use('/public', (req, res, next) => {
  if (env !== 'development') {
    var result = req.url.match(/^\/js\/(maps|src)\/.+\.js$/)
    if (result) {
      return res.status(403).end('403 Forbidden')
    }
  }
  next()
})
app.use('/public', express.static(path.join(__dirname, '/public')))
Run Code Online (Sandbox Code Playgroud)


Gab*_*rtz 6

通过将正则表达式添加到方法的第一个可选参数中是可能的use.

根据Express 4.x API路径文档.

例如,我不想授予secure文件夹内部public文件夹的访问权限:

var express = require('express');
var app = express();

app.use([/^\/public\/secure($|\/)/, '/public'], __dirname + 'public');
Run Code Online (Sandbox Code Playgroud)

这将允许您访问所有文件,但不能访问文件secure夹中的文件.

您也可以使用它来限制文件扩展名,以.js.map以下结尾的示例文件:

app.use([/(.*)\.js\.map$/, '/public'], __dirname + 'public');
Run Code Online (Sandbox Code Playgroud)

并且您还可以添加多个规则,例如从静态文件夹中忽略secure文件夹和文件的示例.js.map:

app.use([/^\/public\/secure($|\/)/, /(.*)\.js\.map$/, '/public'], __dirname + 'public');
Run Code Online (Sandbox Code Playgroud)

  • 你是个很酷的男人.我想我会告诉你的. (3认同)