【问题标题】:updating the user model directly in the req.user in express直接在 req.user 中以 express 更新用户模型
【发布时间】:2018-06-30 06:49:57
【问题描述】:

我正在从一个在线学习平台学习全栈反应课程,其中我使用nodeexpress 作为服务器,passport 用于身份验证,MongoDB 作为后端数据库。所以我有一个流程,当用户登录时,cookie 会附加给用户,因此在用户的后续请求中,cookie 被反序列化,并且来自数据库的用户记录存储在req.user 中。

所以我有一个使用条纹的计费系统,当收取金额时,他可以创建调查(比如 1 美元换 1 个信用)。现在我在 mongo db 中有用户模型

 user: 
{ _id: abc,
  googleId: xyz,
  __v: 0,
  credits: 0 },

当用户支付金额时,信用必须更新,并且必须反映在标题的前端。

const keys = require('../config/keys')
const stripe=require('stripe')(keys.stripeSecretKey);

app.post('/api/stripe',async (req,res) => {
const charge = await stripe.charges.create({
  amount: 500,
  currency: "usd",
  source: req.body.id, // obtained with Stripe.js
  description: "$5 for 5 credits"
})

req.user.credits +=5;
const user = req.user.save(); 
});
};

我的问题是: 为什么更改req.user 并保存它会更新数据库中的用户模型。在上面的代码中,我看不到 mongoose 用户模型的任何导入?

我期待 import 用户模型 -> get 来自 req.user 的用户 id -> 然后使用 findById() -> 在 MongoDB 中识别用户,然后更改积分。

【问题讨论】:

    标签: node.js mongodb express mongoose passport.js


    【解决方案1】:

    您将整个用户模型实例存储到 req.user
    如果您在该所有者中阅读了this issue,请澄清所有内容,并且因为您正在使用 mongoDB 和 mongoose,req.user.save() 工作了see this it depend on DB or/and ORM
    您也可以通过

    进行验证
    console.log(req.user instanceof mongoose.Model); // true
    

    确保在使用前导入猫鼬

    【讨论】:

      【解决方案2】:

      req.user 是用户模型的一个实例,这就是更新数据的原因。我建议您阅读 passportjs 文档中的this part,以了解如何在每个 http 请求中将用户模型恢复为 req.user

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-07
        • 2011-06-28
        • 2019-02-16
        • 1970-01-01
        • 2017-09-20
        • 1970-01-01
        • 1970-01-01
        • 2016-04-01
        相关资源
        最近更新 更多