express. js редирект не может установить заголовок после отправки - PullRequest
0 голосов
/ 05 августа 2020

Я пытаюсь заблокировать доступ к файлу 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));

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

Это потому, что обратный вызов 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, который сбрасывает заголовок после выполнения перенаправления.

0 голосов
/ 05 августа 2020

Это потому, что вы пытаетесь установить заголовок после отправки ответа res.redirect('/'), express stati c пытается установить заголовок для ответа, который уже отправлен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...