我正在从在线学习平台参加完整的堆栈反应课程,其中我使用node
和express
作为服务器,passport
用于身份验证,MongoDB作为后端数据库。所以我有一个流程,当用户登录cookie时附加到用户,因此在用户的后续请求中,cookie被反序列化,并且来自DB的用户记录存储在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中的用户,然后更改信用。
答案 0 :(得分:0)
req.user
是用户模型的一个实例,它是数据更新的原因。我建议您阅读passportjs docs中的this part,了解每个http请求中用户模型如何恢复为req.user
。
答案 1 :(得分:0)
您要将整个User模型实例存储到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
确保猫鼬在使用前已导入