Nodejs:重定向URL

时间:2011-06-04 02:47:12

标签: url redirect node.js

我正试图以这种方式在node.js中重定向我的应用的网址:

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

但是当前页面与新页面混合在一起,看起来很奇怪:|我的解决方案看起来完全合乎逻辑,我不知道为什么会发生这种情况,但是如果我在重定向后重新加载页面就可以了。

无论如何,在节点中进行HTTP重定向的正确方法是什么?

5 个答案:

答案 0 :(得分:8)

看起来快递就像你的方式一样。从我可以看到的差异是他们推动一些身体内容并使用绝对网址。

参见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);
};

答案 1 :(得分:2)

是的,它应该是setHeader中的完整网址。

  res.statusCode = 302;
  res.setHeader('Location', 'http://' + req.headers['host'] + ('/' !== req.url)? ( '/' + req.url) : '');
  res.end();

答案 2 :(得分:1)

如果将其更改为307,会发生什么?

答案 3 :(得分:1)

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);
    });

答案 4 :(得分:0)

此问题还可能取决于您正在处理的请求类型。无法使用标头重定向POST请求。例如,第一次访问FB中的应用程序的访问者最有可能通过“签名请求”POST进行,因此重定向将无效。