2015-06-02 3 views
1

Я хочу иметь возможность установить cookie, а затем перенаправить клиента с node.js, не используя Express или другую стороннюю библиотеку. В Интернете я могу найти примеры, используя Express.Установить cookie и перенаправить, не экспресс

Когда я пытаюсь установить 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

есть причина, почему вы не можете использовать выражения? – Daemedeor

+0

Я смущен, вам не нужно будет делать «set-Cookie»: «some = data; Expires = Wed, 09 Jun 2021 10:18:14 GMT» и т. Д. Вместо передачи в объект и вы уверены, что 'req.headers.cookie' заселяется без промежуточного программного обеспечения cookieparser. Мое мнение таково, что вы изобретаете колесо и должны использовать доступное промежуточное ПО. – adeneo

+0

http://stackoverflow.com/questions/3393854/get-and-set-a-single-cookie-with-node-js-http-server – Daemedeor

ответ

0

Для перенаправления клиента после установки куки без Express, просто передать URL, который вы хотите перенаправить к res.address.

var url = "https://someurl.com";  

res.address(url); 

res.end(); 
0

Чтобы избежать установки двойной статус (200 и 301, я не уверен, если это возможно) вы можете сделать HTML-страницу с метатеге HTTP-EQUIV="Refresh" вместо redirectig статуса, например,

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

И redirect.html выглядит эта

<!DOCTYPE html> 
<html> 
<head> 
<META HTTP-EQUIV="Refresh" CONTENT="1;URL=/redirect-url"> 
</head> 
</html>  
Смежные вопросы