2015-11-23 49 views
0

我使用節點版本5.0.0,UID安全版本2.0.0,而興亞1.1.2版本使用興亞不能設置UID安全令牌在Cookie

我的問題是我試圖用uid-safe生成一個標記並將其保存爲一個cookie,然後檢索該cookie並將其顯示在控制檯中。

該程序生成令牌確定,但是當我嘗試設置使用

this.cookies.set(cookieName, token); 

餅乾它只是似乎掛不顯示任何錯誤消息。 和之後的行應顯示「通過設置cookie永遠不會顯示」。

var koa = require('koa'); 
var app = module.exports = koa(); 
var uid = require('uid-safe'); 

app.use(function *() { 
    var cookieName = 'koa.sid'; 
    uid(18).then(function(token) { 
     console.log("token: " + token); // token: 0bk6D3CFtGJgQ5HmiANFnosC 
     this.cookies.set(cookieName, token); 
     console.log("Got past setting the cookie"); // this never gets shown 
     retrievedToken = this.cookies.get(cookieName); 
     console.log(cookieName + ': ' + retrievedToken); 
    }); 
}); 

if (!module.parent) app.listen(3000); 

回答

2

this.cookies.set()拋出一個異常,但因爲你沒有.catch()子句中你的諾言鏈,該異常丟失(uid(18).then(...).catch(...))。

唯一的例外是:

TypeError: Cannot read property 'set' of undefined 

這是因爲this是不正確的上下文(所有意圖和目的,你應該考慮它是不確定的,如果你不綁定傳遞給.then()回調函數) 。

由於您使用的一臺發電機的功能,你可以使用yield代替:

app.use(function *(next) { 
    var cookieName = 'koa.sid'; 
    var token  = yield uid(18); 

    console.log("token: " + token); 
    this.cookies.set(cookieName, token); 
    console.log("Got past setting the cookie"); 
    ... 
    yield next; 
}); 

此外,this.cookies.get()不會因爲工作(據我所知),將只得到cookie值通過請求傳遞(而您將cookie設置爲響應的一部分)。

+0

謝謝robertklep解決了我的問題 – Laurence