2011-06-04 69 views
12

我想我的應用程序的URL重定向的Node.js這樣:的NodeJS:重定向URL

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

但當前頁面與新的混合,這看起來很奇怪:|我的解決方案看起來完全合乎邏輯,我不知道爲什麼會發生這種情況,但是如果我在重定向後重新加載頁面,它會起作用。

無論如何,在節點中執行HTTP重定向的正確方法是什麼?

+0

您是否嘗試過在響應正文中發送內容? 'response.setHeader('Content-Type','text/plain'); response.end('

302.重定向到xxx.com

');' – 2011-06-04 10:08:24

回答

8

看起來像表達它幾乎是你的方式。從我所看到的不同之處在於,他們推送了一些正文內容並使用絕對網址。

見快遞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

如果將其更改爲307,會發生什麼情況?

+0

當然,但是,謝謝,我編輯我的問題:) – Adam 2011-06-04 03:00:23

+0

@CIRK然後我改變了我的答案。 – jcolebrand 2011-06-04 03:55:52

2

是的,它應該是完整網址setHeader

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

此問題還可能取決於您處理的請求類型。 POST請求無法使用標題重定向。例如,FB中首次訪問您的應用的訪問者最有可能通過「簽名請求」POST進入,因此重定向將無法工作。

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