我有nodejs网页并且我正在使用expressjs。我有几个静态文件夹,当用户注销时,我必须删除其中一些。下面是我添加静态文件夹的方法,我没有使用任何选项,也许这就是问题所在。
app.use(express.static(__dirname + '/public'));
我需要如下所示的内容:
app.use(express.removeStatic(__dirname + '/public'));
或
app.use(express.static(__dirname + '/public',{vissible: false}));
最佳答案
如上所述here express.static
中间件基于serve-static 。无法删除已加载的中间件(静态文件)。
我建议创建您自己的静态服务中间件。您可以使用this作为引用,然后只需在服务静态中间件之前加载 session 中间件,然后添加一个选项来检查 session 数据是否可用,如果不可用,则不提供服务。
基本思想是这样的:
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.loggedIn
为 true
时,这应该只提供静态文件。
当然,您可以将条件更改为您想要的任何内容,例如:
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 上找到该条件要点。
Remember to add the session middleware before using the static middleware.
关于node.js - Expressjs删除静态文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26388122/