Expressjs删除静态文件夹

时间:2014-10-15 17:06:15

标签: node.js express

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

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

我需要以下内容:

app.use(express.removeStatic(__dirname + '/public'));

app.use(express.static(__dirname + '/public',{vissible: false}));

2 个答案:

答案 0 :(得分:6)

正如here所述,express.static中间件基于serve-static。无法删除已加载的中间件(静态文件)。

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

基本理念如下:

  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代码并为其添加了条件,您可以获取here

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

用法

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()
}

条件可以在line 64 of my serve-static要点上找到。

  

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

答案 1 :(得分:0)

您无法从快递中删除静态文件夹。您可以做的是使用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");
  }
})