express-session主动对存入的Buffer数据序列化

作者:杨润炜
日期:2016/1/21 21:31

express-session作为node.js一个重要的npm模块,极大地方便开发者管理项目的session。
实际中,我们往往会把一些数据存放进session,例如存放登录用户的信息,以此为识别用户的状态;或者共享一些操作数据等等。

问题的出现

一次实践中,我把图片数据(Buffer类型)存储在session,为了可以共享到另一个接口上。然后在另一个接口调用出session里的数据时,却奇怪地发现数据变了样,格式是这样的:

  1. {type: 'buffer', data: []}

解决问题

经过一备google后才发现,express-session会将存入的Buffer序列化,然而当我们使用JSON.parse来解析时,却也无法解析出正确的结果,说明express-session主动对Buffer干的不是简单的JSON.stringify,所以我们便在Buffer数据存入session前先JSON.stringify,使用时再JSON.parse,这样便成功地解决了这个问题。
具体的代码方式如下:

  1. // 将Buffer数据存储在session
  2. app.get('/saveBufferData', function (kk, req, res) {
  3. ...
  4. req.session[kk] = JSON.stringify(bufferData);
  5. ...
  6. });
  7. // 将Buffer数据取出
  8. app.get('/getBufferData', function (kk, req, res) {
  9. ...
  10. var bufferData = JSON.parse(req.session[kk], function(key, value) {
  11. return value && value.type === 'Buffer'
  12. ? new Buffer(value.data)
  13. : value;
  14. });
  15. ...
  16. });

问题思考

到底express-session对存入的Buffer做了什么呢?也只有阅读它的源码才能找到答案了!有兴趣的小伙伴不妨试试。

感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/19.html
邮箱:glowrypauky@gmail.com
QQ: 892413924