Expressjs删除静态文件夹
我有nodejs网页,我正在使用expressjs。 我有几个静态文件夹和用户注销我必须删除其中的一些。 下面是我如何添加静态文件夹,我不使用任何选项,也许这是问题。
app.use(express.static(__dirname + '/public'));
我需要像下面这样的东西:
app.use(express.removeStatic(__dirname + '/public'));
要么
app.use(express.static(__dirname + '/public',{vissible: false}));
如此处所述, express.static
中间件基于服务静态 。 没有办法去除已经加载的中间件(静态文件)。
我会build议创build自己的服务静态中间件。 你可以使用这个作为参考,然后在发送静态中间件之前加载会话中间件,然后添加一个选项来检查会话数据是否可用,如果不是,则不要服务。
基本的想法是这样的:
return function serveStatic(req, res, next) { if (req.method !== 'GET' && req.method !== 'HEAD') { return next() } // add this if (req.session.loggedIn === false) { return next() }
例
我已经复制了发送serve-static
代码,并添加了一个条件,你可以在这里得到它。
- 下载并保存为
serve-static.js
。 - 将其包含在
expressjs
项目中。 - 修改为您的用例。
- 谨防未经testing的代码。
用法
var static = require('./serve-static') // session middleware here app.use(static(__dirname + '/public'));
当req.session.loggedIn
为true
时,这应该只能用于静态文件。
当然你可以把条件改成任何你想要的东西:
if (req.session && req.session.ANYTHING_I_WANT === false && !!someMore) { // skip all the code below (will not serve) return next() }
条件可以在我的发球静态要点的64行find。
请记住在使用静态中间件之前添加会话中间件。
您不能从快速删除静态文件夹。 你可以做的是使用res.sendFile
发送一个文件作为响应。 例如:
app.get('public/:filename', function(req, res){ if(user.loggedIn) { res.sendFile(req.params[:filename]); } else { res.status(402).send("Log in to access file"); } })