直接在快速

时间:2018-01-21 14:47:35

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

我正在从在线学习平台参加完整的堆栈反应课程,其中我使用nodeexpress作为服务器,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中的用户,然后更改信用。

2 个答案:

答案 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

确保猫鼬在使用前已导入