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