设置cookie并重定向,无需快递

时间:2015-06-02 19:23:25

标签: javascript node.js redirect cookies

我希望能够设置Cookie,然后使用node.js重定向客户端,而不使用Express或其他第三方库。在线我只能使用Express找到示例。

当我尝试设置cookie并重定向客户端时,cookie不会被设置。但是当我注释掉重定向res.writeHead(301, {Location: serverAddress});时,Cookie会被设置,但是没有重定向。

那么如何设置cookie然后使用node.js直接重定向客户端?

var fs = require("fs");
var http = require('http');

var home = fs.readFileSync('random.html');

var serverAddress = "http://yourIpAddress";

http.createServer(function(req, res) {
  if(req.url === '/favicon.ico') {
    res.writeHead(200, {'Content-Type': 'image/x-icon'});
    res.end();

  } else if(req.headers.cookie) {

    console.log("Got cookie");

    res.writeHead(200, "OK", {'Content-Type': 'text/html'});
    res.write(home);
    res.end();

  } else {

    console.log('Creating Cookie');

    var cookie = {
      "some": "data"
    };

    res.writeHead(200, {'Set-Cookie': cookie, 'Content-Type': 'text/plain'});

    res.writeHead(301, {Location: serverAddress});

    res.end();

  }
}).listen(80);

2 个答案:

答案 0 :(得分:0)

要避免双重状态设置(200和301,我不确定是否可行)您可以使用META标记var jsrender = require('node-jsrender'); (..) res.writeHead(200, {'Set-Cookie': cookie, 'Content-Type': 'text/plain'}); // 301 redirection replaced by rendering html template with redirection inside var tmpl = jsrender.loadFileSync('#redirectTemplate', 'templates/redirect.html') res.end( tmpl.render() ); 而不是redirectig状态呈现html页面,例如

redirect.html

<!DOCTYPE html> <html> <head> <META HTTP-EQUIV="Refresh" CONTENT="1;URL=/redirect-url"> </head> </html> 看起来像这样

class AthleteList(list):
    def __init__(self, a_times=[]):
        list.__init__([])
        self.extend(a_times)

答案 1 :(得分:-1)

要在设置不带res.address的Cookie后重定向客户端,只需将要重定向到的网址传递给var url = "https://someurl.com"; res.address(url); res.end(); 即可。

{{1}}