Узлы: URL перенаправления - PullRequest
12 голосов
/ 04 июня 2011

Я пытаюсь перенаправить URL моего приложения в node.js следующим образом:

// response comes from the http server
response.statusCode = 302;
response.setHeader("Location", "/page");
response.end();

Но текущая страница смешана с новой, выглядит странно: | Мое решение выглядело абсолютно логичным, я не знаю, почему это происходит, но если я перезагружаю страницу после перенаправления, это работает.

В любом случае, как правильно выполнять перенаправления HTTP в узле?

Ответы [ 5 ]

8 голосов
/ 04 июня 2011

Похоже, что экспресс делает то же самое, что и вы.Из того, что я вижу, различия заключаются в том, что они выдвигают некоторое содержание тела и используют абсолютный URL.

См. Метод express response.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 голосов
/ 31 июля 2015
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);
    });
2 голосов
/ 25 марта 2014

Да, это должен быть полный URL в setHeader.

  res.statusCode = 302;
  res.setHeader('Location', 'http://' + req.headers['host'] + ('/' !== req.url)? ( '/' + req.url) : '');
  res.end();
1 голос
/ 04 июня 2011

Что произойдет, если вместо этого вы установите 307?

0 голосов
/ 08 апреля 2014

Эта проблема также может зависеть от типа обрабатываемого вами запроса.Запрос POST не может быть перенаправлен с использованием заголовка.Например, впервые посетитель вашего приложения в FB, скорее всего, будет приходить через POST «подписанный запрос», и поэтому перенаправление не будет работать.

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