gpt4 book ai didi

node.js - 使用 session 使用 Mongoose 插件设置 created_by 用户

转载 作者:搜寻专家 更新时间:2023-11-01 00:46:31 25 4
gpt4 key购买 nike

我正在使用 Node.js,我正在尝试制作一个 Mongoose 插件,它将 created_by 值设置为当前登录的用户 ID。用户存储在 session 中。

lastModifiedPlugin = (schema, options) ->
schema.add
created_by:
type: ObjectId
default: ->
session.user._id // Need access to session
created_at:
type: Date
default: Date.now

我正在使用 connect-mongo 进行 MongoDB session 存储。

express = require "express"
MongoStore = require("connect-mongo")(express)

我知道如何从请求对象获取 session 或在您拥有 session ID 时使用 session 存储。问题是:在这种情况下,我没有请求,也没有 session ,也没有 sessionId。

我的问题:如何在 Mongoose 插件中获取 session ?或者如何以不同的方式(希望同样简单)实现此功能?在我看来,这是一个非常常见的用例。

最佳答案

你很接近。正如您所提到的,您的插件定义中没有可用的 req 和所有附加的 session 好东西。

不过,这些值稍后可用:当您保存模型时。

因此,您希望您的模型在保存时自动包含 user_id,而不是设置默认值。

看是否.pre('save', ...) is enough of a hint弄清楚这一点。


我已经使用 mongoose 中间件亲自尝试过了。即使使用魔术(Intercepting and mutating method arguments),我也无法获得足够简单的解决方案......我最终将 req 对象传递给 .save() (中间件然后可以提取 session 的 user_id)...但是 .save() 的这个添加破坏了中间件的魔力。

lastModifiedPlugin = (schema, options) ->
schema.add
created_by: ObjectId
created_at:
type: Date
default: Date.now
schema.pre 'save', (next, req) -> # No callback required here.
this.created_by = req?.session?.user_id?
next()

使用时:

app.get '/', (req, res) ->
# make an instance of whatever uses the plugin
instance.save req, (err) -> # Callback required here
# Callback to handle errors

我考虑制作一个 express 中间件,它删除模式的中间件并添加一个知道请求对象的新模式中间件......但该解决方案非常笨拙,可能会破坏您尝试使用的其他 mongoose 插件.

关于node.js - 使用 session 使用 Mongoose 插件设置 created_by 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11847711/

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