在express.js中设置cookie出现j:前缀
我正在尝试使用res.cookie来设置cookie,如下所示:
res.cookie('userId',req.user._id); //set cookie here console.log(req.user._id); //returned correct value, eg abc
那么我在我的cookie中看到j:“abc”,为什么会发生这种情况呢?
Cookies被encryption到客户端。 你需要一个cookieparsing器来正确地从你的cookie获取user.id。 请参阅其文档以供使用。
根据Express 4文档 , res.cookie(name, value [, options])
将cookie名称设置为一个值。 值参数可能是一个string或对象转换为JSON。
在这个例子中, req.user._id
是一个对象,所以你可以将cookie设置为res.cookie('userId', JSON.stringify(req.user._id))
我知道这有点晚了,但是我自己也遇到了这个问题,并且一直在挖。 看起来他们将任何JSONstring前缀为“j:”,因此在parsing它时知道这是一个JSONstring。 这基本上意味着你必须手动删除“j:”,如果你使用其他parsing方式。
所以我在NodeJS端使用cookieparsing器&express-session,在客户端使用ng2-cookies。 我也期待阅读userId,即59bca61b74d1cac10ce50d0c
而不是j:59bca61b74d1cac10ce50d0c
🙁
所以,而不是必须在客户端做一些魔术,我只是做了res.cookie('cookieName', cookieValue.toString(), cookieOptions)
,这给了我所寻找的。
做一个console.log('cookies', req.cookies)
显示事情没有问题,尽pipereq.headers.cookie显示了2个用户ID(仍在testing)