Nodejs: URL-адрес переадресации
Я пытаюсь перенаправить URL-адрес моего приложения в node.js следующим образом:
// response comes from the http server
response.statusCode = 302;
response.setHeader("Location", "/page");
response.end();
Но текущая страница смешивается с новой, выглядит странно: | Мое решение выглядело вполне логичным, я не знаю, почему это происходит, но если я перезагружу страницу после перенаправления, она работает.
В любом случае, какой способ перенаправления HTTP в node?
Ответы
Ответ 1
Похоже, экспресс делает это в значительной степени так, как вы. Из того, что я вижу, различия заключаются в том, что они подталкивают содержимое тела и используют абсолютный URL-адрес.
См. метод экспресс-ответа .redirect:
https://github.com/visionmedia/express/blob/master/lib/response.js#L335
// Support text/{plain,html} by default
if (req.accepts('html')) {
body = '<p>' + http.STATUS_CODES[status] + '. Redirecting to <a href="' + url + '">' + url + '</a></p>';
this.header('Content-Type', 'text/html');
} else {
body = http.STATUS_CODES[status] + '. Redirecting to ' + url;
this.header('Content-Type', 'text/plain');
}
// Respond
this.statusCode = status;
this.header('Location', url);
this.end(body);
};
Ответ 2
Да, он должен быть полным URL-адресом в setHeader
.
res.statusCode = 302;
res.setHeader('Location', 'http://' + req.headers['host'] + ('/' !== req.url)? ( '/' + req.url) : '');
res.end();
Ответ 3
Что произойдет, если вы замените его на 307?
Ответ 4
server = http.createServer(
function(req, res)
{
url ="http://www.google.com";
body = "Goodbye cruel localhost";
res.writeHead(301, {
'Location': url,
'Content-Length': body.length,
'Content-Type': 'text/plain' });
res.end(body);
});
Ответ 5
Эта проблема также может зависеть от типа запроса, который вы обрабатываете. Запрос POST не может быть перенаправлен с использованием заголовка. Например, первый посетитель из вашего приложения в FB, скорее всего, будет проходить через "подписанный запрос" POST, и поэтому перенаправление не будет работать.