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

有没有什么办法可以快速排除静态中间件的子目录排除在4.8.5中。

例如,如果我有:

app.use(express.static(__dirname + 'public')); 

而我的公共目录是这样的:

 - public - css - images - scripts - index.html - exclude_me - scripts - views - index.html 

所以我需要排除最后的子目录,当用户做:

 GET /exclude_me 

它应该调用我的路线,而不是自动返回目录。

我不能从公共目录中删除它,因为它依赖于它里面的东西,因为公共目录是angular度应用程序,而exclude_me是另一个从/ exclude_me / scripts / public / scripts获取脚本的angular度应用程序。

我知道这是一点混淆,但它是这样的,我不能只是从公共目录删除它,因为它不会再看到公共/脚本需要,我不能离开它,因为我不能授权它(所有的授权是在公共/脚本

如果有一些更聪明的方法来做到这一点,请随时让我知道:)

你可以添加你自己的中间件。 这是我做了什么来排除一些文件夹:

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

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

根据Express 4.x APIpath文档 。

例如,我不想在public文件夹中访问我的secure文件夹:

 var express = require('express'); var app = express(); app.use([/^\/public\/secure($|\/)/, '/public'], __dirname + 'public'); 

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

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

 app.use([/(.*)\.js\.map$/, '/public'], __dirname + 'public'); 

而且您还可以添加多个规则,如下例所示,其中secure文件夹和以.js.map结尾的文件将从静态文件夹中被忽略:

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

我有一个类似的问题,这可能是你正在寻找的答案。 给定以下目录:

 public css/ images/ secure/ index.html 

我想要的Express Middleware堆栈是这样的:

 1. Static files (except the `secure/` directory) 2. Logging 3. Authentication 4. `secure/` static files 

以下是我解决它的方法:

 var express = require('express'); var path = require('path'); var app = express(); // path.join here makes it work cross platform with Windows / Linux / etc var statics = express.static(path.join(__dirname, 'public')); function secureStatic(secure) { return function (req, res, next) { if (/^\/secure/.test(req.path) === !!secure) return statics(req, res, next); return next(); }; } // add public files app.use(secureStatic()); app.use(logging()); app.use(authentication()); // add secured files app.use(secureStatic(true)); 

这只会在未经身份validation的情况下提供公共文件,并仅在身份validation后提供安全文件。

上面的大多数解决scheme都是使用中间件。

但是,解决这个问题有一个更简单的方法。

不要直接使用dir public来提供静态的assert,而只需要为虚拟path前缀提供服务。

你可以像下面的服务

 var express = require('express'); var app = express(); app.use('/public', __dirname + 'css'); app.use('/public', __dirname + 'images'); ...