首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理错误mongoDB

处理错误mongoDB
EN

Stack Overflow用户
提问于 2021-08-10 08:36:40
回答 1查看 540关注 0票数 0

我正在设置到登录注册的路线,使用NodeJs和Express。我在后端处理我的错误,它把它发送到我的前面,这样我就可以显示消息。

我成功地处理了我想要的每一个错误,但是还有一个让我挣扎的地方。

当我试图创建一个与其他用户相同的电子邮件地址的新用户时,我出现了这个错误:

代码语言:javascript
复制
(node:21) UnhandledPromiseRejectionWarning: MongoError: E11000 duplicate key error collection: my.collection index: email_1 dup key: { email: "test@test.com" }

那就太好了!那时我可以处理,但我不知道为什么我不能得到我想要的回应。以下是我所做的:

这是我的controller to sign up

代码语言:javascript
复制
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,在这里我处理错误

代码语言:javascript
复制
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')),我会处理错误,但它不会。

知道吗,我怎么处理这个错误?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-10 09:36:34

您需要将异步操作包装在一个try..catch块中,如下所示:

代码语言:javascript
复制
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 })
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68723510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档