我有nodejs网页,我正在使用expressjs。我有几个静态文件夹,用户注销我必须删除其中一些。下面是我如何添加静态文件夹,我没有使用任何选项可能这是问题。
app.use(express.static(__dirname + '/public'));
我需要以下内容:
app.use(express.removeStatic(__dirname + '/public'));
或
app.use(express.static(__dirname + '/public',{vissible: false}));
答案 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.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要点上找到。
请记住在使用静态中间件之前添加会话中间件。
答案 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");
}
})