从mongoose findOne动态添加新属性:value到模型

时间:2017-08-17 10:14:27

标签: node.js express mongoose-schema

我正在尝试在我的应用程序中实现忘记密码恢复逻辑。

这是我的Express路由器:

router.post('/passwordreset', function(req, res) {
User.findOne({'local.email' : req.body.email}, function(err, user) {
    if(err) throw err;
    if(user) {
      // creating a token for this user's password reset
      let token = Math.random().toString(36).substring(2);
      // creating a password reset link
      let url = req.protocol + '://' + req.get('host') + '/passwordreset/' + token;
      // fetching recivier email
      let email = user.local.email;
      // setting reset token to user and saving it's modified model
      user.add({resetToken: token});
      user.save(function(err) {
        if(err) throw err;
            mailer.passwordReset(email, url);
      });
    }else {
      res.render('login', {message: 'Email is not found in database!'});
    }
});
});

我的mongoose用户架构中没有“resetToken”属性,但我想动态添加它,以便稍后我可以通过此令牌搜索用户并为其分配新密码。我知道可以通过在保存之前为它们分配“unsifined”来删除未使用的属性,但有没有一个相反的解决方案来向我从findOne函数获取的对象添加属性?

user.add一直说它不是一个函数。有什么建议吗?

PS。我知道我可以事先创建一个空的“resetToken”属性并用它来存储和覆盖令牌,但我不知道它是否是最好的,也是唯一一个解决方案。有什么建议?提前完成。

1 个答案:

答案 0 :(得分:0)

在用户架构中禁用strict选项。

let UsersSchema = new Schema(
    {
        login: String,
        sha256: String,
        group: Number,
        //And so on
    },
    {
        strict: false
    });

链接到documentation