首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Primus写入Expressjs会话

如何使用Primus写入Expressjs会话
EN

Stack Overflow用户
提问于 2014-09-05 16:52:00
回答 2查看 445关注 0票数 0

使用ExpressJs4和Primus,我可以共享Express会话。

代码语言:javascript
复制
primus.on('connection', function (spark) {
  var req = spark.request; // Here, I have the Express session
  req.session.foo = 'bar'; // I try to write into the session.
});

当我将{ foo: 'bar' }值写入会话时,我无法从标准http express调用中检索到它。

代码语言:javascript
复制
app.get('/api/...', function (req, res) {
  console.log(req.session.foo); // Print undefined :'(
  res.send();
});

输出为undefined。你能给我解释一下为什么吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-09-05 17:38:05

根据快速会话文档,我们可以将会话保存到存储中。https://github.com/expressjs/session#sessionsave

代码语言:javascript
复制
primus.on('connection', function (spark) {
  var req = spark.request; // Here, I have the Express session
  req.session.foo = 'bar'; // I try to write into the session.
  req.session.save(); // Save the session to the store
});

然后,它工作得很好!

票数 3
EN

Stack Overflow用户

发布于 2016-02-28 02:38:17

下面是我目前的工作方式(Express 4.13.4;Primus 4.0.5)

App.js

代码语言:javascript
复制
var express = require('express');
var cookieParser = require('cookie-parser');
var session = require('express-session');

var sockjs = require('sockjs');
var http = require('http');
var Primus = require('primus');
var realtime_functions = require('./custom_modules/realtime_functions.js');

var app = express();

var app_secret_key = 'app secret';
var cookieparser = cookieParser(app_secret_key);
var sessionstore = new session.MemoryStore();

app.use(cookieparser);
app.use(session({
  secret: app_secret_key,
  saveUninitialized: false,
  resave: false,
  store: sessionstore
}));

realtime_functions(app, cookieparser, sessionstore);

realtime_functions.js

代码语言:javascript
复制
var primus_start = function(express, cookies, store) {

  var server = http.createServer(express);

  var primus = new Primus(server, {transformer: 'SockJS', parser: 'JSON'})
  primus.use('rooms', primusRooms)
  server.listen(3000, '0.0.0.0');

  primus.before('cookies', cookies);
  primus.before('session', function session(req, res, next) {
    try {
      var sid = req.signedCookies['connect.sid'];
      if (!sid) { return next(); }
      req.pause();
      store.get(sid, function (err, session) {
        if (err) {
          primus.emit('log', 'error', err);
          return next();
        }
        if(session) {
          req.sessionID = sid;
          req.sessionStore = store;
          req.thesession = store.createSession(req, session);
        }
        req.resume();
        next();
      });
    } catch(error) {
      console.log(error);
    }
  });

  primus.on('connection', function(spark) {
    spark.on('data', function(data) {
      spark.request.thesession.addthis = "save this to session";
      spark.request.thesession.save();
    });
  });
}
module.exports = primus_start;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25682013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档