Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose试图使用承诺处理预保存错误_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose试图使用承诺处理预保存错误

Javascript Mongoose试图使用承诺处理预保存错误,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试使用预保存来处理用户或电子邮件存在的错误,但我无法使其工作。如果我注释掉预保存块,一切正常,但在重复的情况下会返回默认mongoose错误,因为我的模式使用Unique 我想检查用户名和电子邮件是否唯一,并发送一条包含true或false的消息,以便我可以在前端同时处理这两条消息。(顺便说一句,这是一个快速Restful API) 有人知道怎么做吗 以下是我当前的设置: 当请求通过所有中间件等时,我的注册方法在我的注册后路由上调用。ValidateRegisterForm对数据进行一些

我正在尝试使用预保存来处理用户或电子邮件存在的错误,但我无法使其工作。如果我注释掉预保存块,一切正常,但在重复的情况下会返回默认mongoose错误,因为我的模式使用Unique

我想检查用户名和电子邮件是否唯一,并发送一条包含true或false的消息,以便我可以在前端同时处理这两条消息。(顺便说一句,这是一个快速Restful API)

有人知道怎么做吗

以下是我当前的设置:

当请求通过所有中间件等时,我的注册方法在我的注册后路由上调用。ValidateRegisterForm对数据进行一些验证,如果一切正常,则散列密码并将所有数据传递给createUser,否则它会发送错误

public register(req, res){
   validateRegisterForm(req.body).then(data => {
    createUser(data).then(() => {
      res.send({status: 201});
    }).catch(err => {
      res.send(err);
    })
  }).catch(err => {
      res.send(err);
    });
}
我的createUser方法:

export const createUser = (data) => {
  return new Promise( async (resolve, reject) => {
     const userData = JSON.parse(data);
     const newUser = new User(userData);
     await newUser.save()
       .then(() => resolve())
       .catch(err => reject(err))
  });
};
和“我的用户模式”以及“预保存”:

userSchema.pre('save', () => {
  return new Promise((resolve, reject) => {
    const userExists =  !! this.findOne('username');
    const emailExists = !! this.findOne('email');
    if (userExists || emailExists){
      const err = JSON.stringify({inUse : {mail: emailExists, usr: userExists}});
      reject(err)
    }
    resolve();
  })
});

我找到了解决方案,显然pre-save不支持箭头函数。现在一切都像一个魔咒。对我来说,这是一个理解findOne如何工作以及理解什么与什么相关的问题

我能够使用此.get('value')相对于当前文档评估数据库


如果要使用预保存,则它将无法与箭头(=>)功能一起使用

你需要像下面这样用传统的方式来做

userSchema.pre('save', function () {
   your code goes here....
})

如果不使用
if{}else{}
请确保
返回在您的
拒绝后(err)(这里没有明确的必要,但是如果您在
resolve();
之前添加了更多代码,这将是为了防止错误代码运行。谢谢您的提示,先生
userSchema.pre('save', function () {
   your code goes here....
})