我希望能够设置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);
答案 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}}