我尝试通过将用户重定向到主页来阻止对Json文件的访问。
当尝试访问文件时,即使可以工作,我也会收到“发送后无法设置标题”的信息。
如果我删除app.use(express.static(__dirname));
,不会收到此错误,但我不知道为什么。
app.get('/', function(req, res){
res.sendFile(__dirname +'/index.html');
});
// Protect file
app.use(function(req, res, next) {
if (req.user == null && req.path === '/File.json')
{
res.redirect('/');
}
next();
});
app.use(express.static(__dirname));
答案 0 :(得分:0)
那是因为您要在发送响应res.redirect('/')
之后尝试设置标头,而static static试图将标头设置为已发送的响应
答案 1 :(得分:0)
这是因为next
回调在您res.redirect
之后被称为事件
// Protect file
app.use(function(req, res, next) {
if (req.user == null && req.path === '/File.json') {
res.redirect('/');
}
next();
});
如您所见,没有任何东西可以阻止执行next
回调。为避免您可以将其包装在if... else ...
语句中,也可以在return
之前添加res.redirect
。
这意味着即使此条件req.user == null && req.path === '/File.json'
被匹配。 IF
语句内部的所有块的执行以及IF
语句外部的块的执行。因此,将执行next
回调,该回调将调用堆栈中的下一个中间件express.static
,并且通过这种方式,中间件将尝试呈现File.json
,该中间件将在重定向已执行。