gpt4 book ai didi

javascript - Mongoose 尝试使用 Promise 处理预保存错误

转载 作者:行者123 更新时间:2023-12-03 00:36:27 25 4
gpt4 key购买 nike

我正在尝试使用预保存来处理用户或电子邮件存在错误,但无法使其正常工作。如果我注释掉我的预保存 block ,一切都会正常工作,但如果出现重复,它会返回默认的 Mongoose 错误,因为我的架构使用 Unique。

我想检查用户名和电子邮件是否唯一,并发送一条包含 true 或 false 的消息,以便我可以在前端同时处理这两个消息。 (顺便说一句,这是一个 Express 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();
})
});

最佳答案

如果您想使用预保存,则它不适用于箭头(=>)函数。

您需要按照如下所示的老式方式进行操作。

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

关于javascript - Mongoose 尝试使用 Promise 处理预保存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com