我正在设置到登录和注册的路线,使用NodeJs和Express。我在后端处理我的错误,它把它发送到我的前面,这样我就可以显示消息。
我成功地处理了我想要的每一个错误,但是还有一个让我挣扎的地方。
当我试图创建一个与其他用户相同的电子邮件地址的新用户时,我出现了这个错误:
(node:21) UnhandledPromiseRejectionWarning: MongoError: E11000 duplicate key error collection: my.collection index: email_1 dup key: { email: "test@test.com" }那就太好了!那时我可以处理,但我不知道为什么我不能得到我想要的回应。以下是我所做的:
这是我的controller to sign up:
const { signUpErrors, signInErrors } = require('../utils/errors.utils')
module.exports.signUp = async (req, res) => {
const { email, password, firstname, lastname, address, mobilePhone } = req.body
const user = await UserModel.create({ email, password, firstname, lastname, address, mobilePhone })
const infoForJWT = user._id
const token = createToken({ infoForJWT })
if (!user) {
const errors = signUpErrors(err)
return res.status(200).send({ errors })
} else {
return res.send({ token })
}
}这是我的utils file,在这里我处理错误:
module.exports.signUpErrors = (err) => {
let errors = { email: '', password: '' }
if (err.message.includes('email'))
errors.email = "Incorrect e-mail or already taken."
if (err.message.includes('password'))
errors.password = "The password should be at least 6 characters."
if (err.code == 11000)
errors.email = "This e-mail is already registered"
return errors
}我认为使用if (err.message.includes('email')),我会处理错误,但它不会。
知道吗,我怎么处理这个错误?
发布于 2021-08-10 09:36:34
您需要将异步操作包装在一个try..catch块中,如下所示:
try {
const user = await UserModel.create({ email, password, firstname, lastname, address, mobilePhone })
const infoForJWT = user._id
const token = createToken({ infoForJWT })
res.send({ token })
} catch (e) {
// handle the error
const errors = signUpErrors(e)
return res.status(200).send({ errors })
}https://stackoverflow.com/questions/68723510
复制相似问题