重新创建快速会议?

时间:2012-09-05 23:27:00

标签: node.js coffeescript express connect

鉴于sessionId,我需要获得快速会话对象。之后,我希望能够编辑此会话对象,并让它自动更新会话存储中的会话。

Session = require('express').session.Session;

_testSession: (sStore, sId) ->
  console.log 'called _testSession with session id: ' + sId

  sStore.get sId, (error, session) ->
    expressSession = new Session 
        sessionId: sId
        sessionStore: sStore
        , session
    expressSession.foo = 17

    console.log 'set expressSession.foo to: ' + expressSession.foo

    setTimeout (()->
        sStore.get sId, (error, session) ->
            console.log 'foo = ' + session.foo
        ), 1000

但是,在运行此测试时,我得到以下输出:

called _testSession with session id: YaFLcq3eSvoNuwnLS1T1ntrC.3UJMuQ5So6lYRWLDgIRx4Vk/Ab1qH65zV9IwMqoMcR8
set expressSession.foo to: 17
foo = undefined

有没有人知道这里发生了什么?...... :(

====编辑====

我也试过调用save(),所以代码为:

console.log 'set expressSession.foo to: ' + expressSession.foo

expressSession.save (error) ->
    console.log 'error: ' + error
    setTimeout (()->
        sStore.get sId, (error, session) ->
            console.log 'foo = ' + session.foo
        ), 1000

获得相同的输出:(

====编辑====

没关系,save()有效。 sessionId应该是sessionID ... / facepalm。

1 个答案:

答案 0 :(得分:1)

正如@robertj所说,你可能不会看到保存的对象,除非你告诉它保存。

但更重要的是,除非你特意打算测试会话对象本身(即连接会话的中间件),否则你的工作没有意义。

没有更多的上下文很难说,但我希望你的目的是确保某些路由处理程序或中间件将某些内容放入会话中,是吗?如果是这样,只需单独测试即可。 e.g。

var should = require('should');

var req = { session : {}, /*any other bits of req you expect your handler to need */};
var res = { /* whatever functions your handler needs off the response */ };

yourHandler(req, res);
req.session.foo.should.be.ok; // not null; alternatively test equality or whatever

那是'单元测试'。如果你正在进行集成测试(你希望看到的东西在一起工作,例如数据库和视图等),那么你仍然不需要检查会话,你应该检查它的影响