gpt4 book ai didi

node.js - 通过 _id 转换错误手动删除 connect-mongo session

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:12 25 4
gpt4 key购买 nike

我正在尝试从 connect-mongo session 集合中手动删除文档。当我尝试删除文档时,出现以下错误:

message: 'Cast to ObjectId failed for value "gl9-V-bjAjqv2Nwdf9vHPLN_Fnnl4Thz" at path "_id"'

express-session 使用以下函数生成 session ID:

function generateSessionId(sess) {
return uid(24);
}

从此函数生成的 session 将进入 session 文档的 _id 属性。但是,当您尝试通过生成的 ID 查找或删除文档时,您会收到错误消息。

mongodb 文档说 _id 应该是

ObjectId is a 12-byte BSON type ObjectId

我尝试使用 session 上的 genid 选项覆盖 session ID,但覆盖不会将其写入数据库。

如何在文档中获取有效的 _id 或使用无效 _id 查询文档?

谢谢!

我的基础设施:Express 4.10、Node v0.12.7、Compose.io、connect-mongo、express-session

最佳答案

好吧,你的问题是你用来从 session 存储中删除文档的 Mongoose 模型。您可能应该调用 req.session.destroy() 或设置 TTL 来删除过期的 session 。

但基本上, Mongoose 期望 _id 字段的“类型”是一个 ObjectId 以及这样的“自动转换”。 mongo-connect 中间件本身不使用 mongoose 方法,而是与底层驱动程序方法通信。所以使用它的内部方法时不存在这个问题。

因此,您的 Mongoose 架构定义应如下所示:

var sessionSchema = new Schema({
"_id": String,
"session": String
},{ "_id" false });

或者至少包含 { "_id": false } 以删除默认的自动转换行为。

关于node.js - 通过 _id 转换错误手动删除 connect-mongo session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32062546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com