我使用的是节点版本5.0.0,uid-safe版本2.0.0和koa版本1.1.2
我的问题是我尝试使用uid-safe生成令牌并将其另存为cookie然后检索cookie并将其显示在控制台中。
程序生成令牌ok,但是当我尝试使用
设置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);
答案 0 :(得分:3)
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()
将无效,因为(AFAIK)它只会获取通过请求传递的cookie值(而您将cookie设置为响应的一部分)。