问题标签 [connect-mongo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
706 浏览

node.js - connect-mongo 导致 MongoError: E11000 duplicate key 错误收集

我正在使用 connect-mongo 来存储会话。

有时我会得到:

MongoError: E11000 重复键错误收集

我有一个相对较大的站点,它使用 mongoDB 进行复制。

我试图清除会话文档,这又出现了。

谢谢

0 投票
1 回答
36 浏览

node.js - 在 Express.js 中,如何仅为登录用户生成服务器端会话?mo

目前,我正在使用快速会话:

https://github.com/expressjs/session

结合

连接蒙戈:

https://github.com/jdesboeufs/connect-mongo

我使用网站上的样板示例,我可以成功地为登录用户生成会话。

但是我也有一个健康监视器,它每隔几秒钟就会对站点进行一次 ping 操作,这也会在服务器上生成会话,从而阻塞数据库。

如何仅为登录用户生成会话?

0 投票
2 回答
2112 浏览

node.js - TypeScript - '{}' 类型的参数不可分配给'{}' 类型的参数 - MongoStore

我对 TS 比较陌生,并且在new MongoStore()参数中遇到了类型问题。通常我可以通过db: database在 JS 中作为参数写入来重用 Native MongoDB 连接,但是 TS 显示以下错误:

'{ db: Db; 类型的参数 }' 不能分配给 'MongoUrlOptions | 类型的参数 Mogoose 连接选项 | NativeMongo 选项 | NativeMongoPromiseOptions'。键入'{分贝:分贝;}' 不可分配给类型 'NativeMongoPromiseOptions'。'{ db: Db; 类型中缺少属性 'dbPromise' }'。

我试过写new MongoStore({ db: database } as NativeMongoOptions),但这也无济于事。

[更新] 添加as NativeMongoOptions会产生差异错误:

键入'{分贝:分贝;}' 不可分配给类型 'NativeMongoOptions'。属性“db”的类型不兼容。类型 'import("/node_modules/@types/mongodb/index").Db' 不可分配给类型 'import("/node_modules/@types/connect-mongo/node_modul...'。缺少属性 'authenticate'在“Db”类型中。

这是我的代码或 TS 类型的问题吗?

下面是我的代码片段。

0 投票
0 回答
294 浏览

node.js - MongoError - 由 npm 模块 connect-mongo 引起

我收到这些错误

MongoError:服务器实例池被破坏

MongoError:拓扑被破坏

如果有人知道是什么导致这个模块出现这些错误以及如何修复它,我会很高兴。.

MongoError:服务器实例池在 Server.update (/home/jnyheim/var/www /node_modules/mongodb-core/lib/topologies/server.js:834:16) 在 Server.update (/home/jnyheim/var/www/node_modules/mongodb/lib/topologies/topology_base.js:326:25) 在updateDocuments (/home/jnyheim/var/www/node_modules/mongodb/lib/operations/collection_ops.js:1344:19) 在/home/jnyheim/var/www/node_modules/mongodb/lib/utils.js:437:24在 Collection.update (/home/jnyheim/var/www/node_modules/mongodb/lib 的 executeOperation (/home/jnyheim/var/www/node_modules/mongodb/lib/utils.js:432:10) /collection.js:829:10) 在 withCallback.collectionReady.then。集合 (/home/jnyheim/var/www/node_modules/connect-mongo/src/index.js:244:48) at process._tickCallback (internal/process/next_tick.js:188:7) MongoError: 拓扑被破坏在 nextFunction (/home/jnyheim/var/www/node_modules/mongodb-core/lib/cursor.js:603:27) 在 Cursor.next (/home/jnyheim/var/www/node_modules/mongodb-core/lib/ cursor.js:824:3) 在 Cursor._next (/home/jnyheim/var/www/node_modules/mongodb/lib/cursor.js:211:36) 在 nextObject (/home/jnyheim/var/www/node_modules/ mongodb/lib/operations/cursor_ops.js:186:10) 在下一个 (/home/jnyheim/var/www/node_modules/mongodb/lib/operations/cursor_ops.js:165:3) 在 executeOperation (/home/jnyheim/ var/www/node_modules/mongodb/lib/utils.js:420:24) 在 Cursor.next (/home/jnyheim/var/www/node_modules/mongodb/lib/cursor.js:253:10) 在 findOne (/home/jnyheim/var/www/node_modules/mongodb/lib/operations/collection_ops.js:542:10) 在 /home/jnyheim/var/www/node_modules/mongodb/lib/utils.js:在 Collection.findOne (/home/jnyheim/var/www/node_modules/ mongodb/lib/collection.js:1021:10) 在 withCallback.collectionReady.then.collection (/home/jnyheim/var/www/node_modules/connect-mongo/src/index.js:192:46) 在findOne (/home/jnyheim/var/www/node_modules/mongodb/lib/collection.js:1021:10) 在 withCallback.collectionReady.then.collection (/home/jnyheim/var/www/node_modules/connect-mongo/src /index.js:192:46) 在findOne (/home/jnyheim/var/www/node_modules/mongodb/lib/collection.js:1021:10) 在 withCallback.collectionReady.then.collection (/home/jnyheim/var/www/node_modules/connect-mongo/src /index.js:192:46) 在

我发现它是由这个 const MongoStore = require('connect-mongo')(session); 模块在执行时 引起的

商店:新的 MongoStore({mongooseConnection:mongoose.connection})

完整代码:

<3

0 投票
1 回答
1049 浏览

session - 快速会话 - 配置会话超时和生命周期

我目前正在将 Express 单点登录应用程序迁移到新的身份提供者。这个新的 IdP 需要以下会话标准。

  1. 会话超时:1 小时
  2. 会话寿命:3 小时

如果我对此的解释正确,则会话应在连续 1 小时的空闲时间或会话最初生成 3 小时后终止,以先发生者为准。正在使用的相关 npm 包是 express-session 1.15.6 和 connect-mongo 2.0.1。在这一点上,我已经能够实现这两个会话参数,但不能同时实现。我也可以...

  1. 通过将会话 cookie maxAge 设置为 1 小时并将会话滚动设置为 true 来实现 1 小时会话超时,从而在每个响应中重置 cookie expires 字段。如connect-mongo中所述,如果 cookie 过期,它将应用于会话 ttl 字段。因此,只要不发生超时,更新 cookie 就会有效地无限期地更新会话。
  2. 通过将会话 cookie maxAge 设置为 3 小时并将会话滚动设置为 false 来实现 3 小时会话生命周期。现在会话 ttl 不会在每次响应时都重置,并且在会话创建 3 小时后它将被终止。

如上所述,我不能同时让这两个工作。任何见解都会有所帮助,因为我的网络开发经验很少。我研究过更改索引 TTL,这给了我一些初步希望。我相信我可以向会话对象添加另一个不依赖于会话 cookie 过期值的日期字段,即 createdAt 日期。然后,我可以使用 cookie expires 作为超时组件,并将 createdAt 日期作为生命周期组件。不幸的是,我没有运气将此值添加到会话对象中。我是否忽略了一个明显的快速会话选项或 connect-mongo 设置来解决我的问题?

0 投票
1 回答
149 浏览

express - 如何使用 Express、Express-session、Passport 和 Connect-mongo 在服务器中仅为登录用户生成会话?

我正在使用 express-session、passport、connect-mongo 和 mongodb-atlas 最新版本来创建会话并将它们保存在服务器上,问题是当 app.use(passport.session()) 时,甚至会创建此会话如果用户没有登录。

这导致当护照被初始化和护照会话时,cookie 与会话 id 一起保存并且会话被保存在 mongodb mi 问题是如何只为登录的用户保存会话

0 投票
1 回答
1563 浏览

node.js - 如何从nodejs express.js中的一个用户帐户管理多个登录的正确方法是什么?

我正在使用 express-session、passport 和 connect-mongo 来保存 mongodb 中的会话。我的 package.json

这工作正常,并且可以从同一用户帐户,在同一个浏览器中以隐身模式或使用其他浏览器或不同设备进行多次登录,但我不知道管理这个的正确方法是什么。我以免在同一用户的会话和购物车存储之间产生错误。

如何处理来自一个用户帐户的多次登录的标准管理方式,我的意思是让会话始终链接到最后更新的数据以及存储,这样就不会发生错误。

0 投票
1 回答
381 浏览

node.js - sails.js 会话数据未保存到数据库中

我可能做错了什么。请指导我正确的方向。

我正在尝试使用“connect-mongo”实现 Sails 会话功能。我做了与文档Sails session mongo中解释的相同的实现。成功认证后,我试图将会话数据保存到 mongoDb 中。但在我的情况下,它没有保存在 mongo 集合中,并且集合始终为空。

我的配置在session.js

以及我要如何保存。

我也没有收到任何错误

0 投票
2 回答
164 浏览

node.js - 我可以强制会话从服务器端更新吗?

我有通过护照创建的用户配置文件,这些配置文件通过 connect-mongo 存储在 mongodb 中。如果我更新会话的用户配置文件,我必须运行req.login()以触发护照以更新用户会话以匹配新的数据库信息。如果我从我的管理员帐户更改另一个用户,我将无法运行此功能,有没有办法可以为用户更新它,或者在下次加载会话时触发它更新?

0 投票
1 回答
798 浏览

node.js - 如何使用 express-session 和 connect-mongo 查找和编辑会话?

我使用express-sessionconnect-mongo来处理用户会话。

我需要弄清楚如何在会话数据库中搜索特定用户并对其进行更新。

我尝试使用假模式查询数据库并且能够找到它,但是当我尝试保存它时会出现错误提示 ID 不匹配,而且当我尝试从返回的文档中记录 ID 时,它是未定义的。

错误:

代码:

任何人都可以弄清楚为什么 _id 字段有问题,或者指出我对编辑会话的更好方法?注意:这不是编辑登录用户的会话,而是编辑任何用户的会话。