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.loggedIntrue时,这应该只能用于静态文件。

当然你可以把条件改成任何你想要的东西:

 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"); } })