res.location (path) ничего не делает? (Express) - PullRequest
0 голосов
/ 09 мая 2018

Я искал ответы на вопросы Переполнение стека ; не сработало ... Почему res.location(path) не работает? Мой Location-header не меняется. Нормальный рендеринг работает нормально.

Могу добавить, что в конечном коде я хочу отобразить страницу. Итак, я хочу заменить res.end() на res.render('app', {...}) и использовать handlebars.js для рендеринга.

Код, который не работает должным образом :

app.get('/sub-link/:wildcard', (req, res) => {
    res.location('/new-header');
    res.end();
});

Я читал документацию ; не смог найти причину. Единственное, что я обнаружил, это может быть проблема, это браузер:

После кодирования URL, если он еще не закодирован, Express передает указанный URL-адрес для браузера в заголовке Location, без каких-либо проверка.

Браузеры берут на себя ответственность за получение намеченного URL-адреса из текущий URL или ссылающийся URL, а также URL, указанный в Заголовок местоположения; и соответственно перенаправить пользователя.

  • Я пробовал это с последним Node.js, совместимым с Firebase SDK 2018 (сервер)
  • Я пробовал это в Google Chrome и IE Edge (клиент)

1 Ответ

0 голосов
/ 09 мая 2018

res.location не устанавливает код состояния ответа 3xx или 201. Он только устанавливает заголовок Местоположение .

Вместо этого можно использовать res.redirect, который установит код состояния на 302 и заставит браузер изменить URL-адрес.

В заголовке ответа Location указывается URL-адрес, на который следует перенаправить страницу. Значение предоставляется только в том случае, если используется 3xx (перенаправление) или 201 (создан) статус ответа.

Это будет работать:

app.get('/sub-link', (req, res) => {
    res.location('/new-header');
    res.send(302);
});

или

app.get('/sub-link', (req, res) => {
    res.redirect('/new-header');
});

Вы можете проверить res.location & res.redirect код, чтобы увидеть различия между ними.

...