node.js - 处理错误 mongoDB
问题描述
我正在使用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'))
,我会处理错误,但事实并非如此。
任何想法,我如何处理这个特定的错误?
解决方案
您需要将异步操作包装在 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 })
}
推荐阅读
- reactjs - 在 React 中使用增量跳过迭代
- python - Python3 subprocess.Popen句柄回车
- r - 如何使用嵌套图加快反应速度?
- excel - 有没有更好的方法来编写这个 VBA 代码?
- flutter - 小部件库 BoxConstraints 捕获的异常具有负的最小宽度
- javascript - react.js 中的 Openweather api 调用失败
- java - 有没有办法使用 gradle 来混淆 minecraft 1.8.9 的代码?
- java - 将字符串从 EditText 保存到 SQLite
- amazon-web-services - 如何在 CDN 上同时提供静态 HTML 和资产并拥有友好的 URL
- redis - Redis XRANGE:ERR 指定为流命令参数的流 ID 无效