小编Dux*_*ime的帖子

无法从带有Socket.IO的cookie获取Express会话ID

我在Node中有一个典型的Web应用程序,它使用Express框架和会话中间件.我也在为我的应用程序的某些动态部分使用Socket.io(目前,这是一个聊天机制,但这是切向的).我已经能够自己成功设置会话和socket.io,但是想要将它们组合起来(EG:将套接字聊天消息与用户帐户相关联而不会访问数据库).

应该注意(我可以看到这是一个可能的问题点),我在不同的端口上运行两个快速服务器:一个用于常规HTTP流量,一个用于HTTPS流量.但是,我让两台服务器都经过了一个完美配置并共享同一个会话存储.http和https页面之间的会话确实存在.最初通过HTTPS提供的页面设置会话,socket.io页面是vanilla HTTP.

我正在按照这里的指南来实现我正在寻找的有关集成socket.io和会话的内容.但是,在授权功能中,尽管我的应用程序的基于会话的部分按预期工作,但从未设置data.headers.cookie.更奇怪的是,在设置会话后,如果我console.log(document.cookie)在浏览器中执行操作,我会得到一个空字符串,但是当我使用Firefox开发人员工具栏查看我的cookie时,有一个用于express和connect的SID cookie.

以下是服务器代码的相关部分:

var config = {
    ip          : "127.0.0.1",
    httpPort    : 2031,
    httpsPort   : 2032
};

var utils       = require("./utils"),
    express     = require('express'),
    fs          = require('fs'),
    parseCookie = require('./node_modules/express/node_modules/connect').utils.parseCookie,
    routes      = require('./routes')(config); 

var httpsOpts = {
    key : fs.readFileSync("cert/server-key.pem").toString(),
    cert: fs.readFileSync("cert/server-cert.pem").toString()
 };

var app             = express.createServer(),
    https           = express.createServer(httpsOpts),
    io              = require("socket.io").listen(app, { log: false}),
    helpers         = require("./helpers.js"),
    session         = new express.session.MemoryStore(),
    sessionConfig   = express.session({
        store   : session,
        secret  : 'secret',
        key …
Run Code Online (Sandbox Code Playgroud)

javascript session-cookies node.js express socket.io

14
推荐指数
1
解决办法
3856
查看次数

使用MongoJS管理与Mongo的连接的正确方法是什么?

我正在尝试使用MongoJS作为Node中本机Mongo驱动程序的包装器.我喜欢用模拟方法在我的收藏中的文件,如JavaScript类populate(),save()等等.

在大多数语言中,例如C#和Java,我习惯于为每个查询显式连接然后断开连接.大多数示例仅提供连接示例,但在完成时从不关闭连接.我不确定驱动程序是否能够自行管理或者我是否需要自己手动执行此操作.文档很少.

这是相关的代码:

User.prototype.populate = function(callback) {
    var that = this;    

    this.db = mongo.connect("DuxDB");
    this.db.collection(dbName).findOne({email : that.email}, function(err, doc){
        if(!err && doc) {
            that.firstName  = doc.firstName;
            that.lastName   = doc.lastName;
            that.password   = doc.password;
        }

        if (typeof(callback) === "function"){
            callback.call(that);
        }

        that.db.close();
    });
};
Run Code Online (Sandbox Code Playgroud)

我发现只要close()在MongoJS对象上调用该方法,我就无法在后续调用中打开新连接.但是,如果我不调用此方法,则一旦所有异步调用完成,Node进程永远不会终止,就像它等待与Mongo断开连接一样.

使用MongoJS管理与Mongo的连接的正确方法是什么?

javascript mongodb node.js

6
推荐指数
2
解决办法
6165
查看次数