Expressjs删除静态文件夹

Gon*_*nys 1 node.js express

我有nodejs网页,我正在使用expressjs.我有几个静态文件夹,用户注销我必须删除其中一些.下面是我如何添加静态文件夹,我没有使用任何选项可能这是问题.

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

我需要以下内容:

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

要么

app.use(express.static(__dirname + '/public',{vissible: false}));
Run Code Online (Sandbox Code Playgroud)

maj*_*rif 6

如上所述这里express.static中间件是基于服务静电.无法删除已加载的中间件(静态文件).

我建议创建自己的服务静态中间件.您可以使用作为参考,然后在服务静态中间件之前加载会话中间件,然后添加一个选项,检查会话数据是否可用,如果不可用则不提供.

基本想法是这样的:

  return function serveStatic(req, res, next) {
    if (req.method !== 'GET' && req.method !== 'HEAD') {
      return next()
    }
    // add this
    if (req.session.loggedIn === false) {
      return next()
    }
Run Code Online (Sandbox Code Playgroud)

我已复制serve-static代码并为其添加了条件,您可以在此处获取.

  • 下载并保存为serve-static.js.
  • 将其包含在您的expressjs项目中.
  • 修改为您的用例.
  • 注意未经测试的代码.

用法

var static = require('./serve-static')
// session middleware here
app.use(static(__dirname + '/public'));
Run Code Online (Sandbox Code Playgroud)

这应该只在req.session.loggedInis 时提供静态文件true.

当然,您可以将条件更改为您想要的任何内容:

if (req.session && req.session.ANYTHING_I_WANT === false && !!someMore)  {
  // skip all the code below (will not serve)
  return next()
}
Run Code Online (Sandbox Code Playgroud)

条件可以在我的服务静态要点的第64行找到.

请记住在使用静态中间件之前添加会话中间件.