首页 > 解决方案 > 处理错误 mongoDB

问题描述

我正在使用NodeJsExpress设置登录注册的路线。我在后端处理我的错误,然后将其发送到我的前端,以便我可以显示消息。

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

当我尝试使用与其他用户相同的电子邮件地址创建新用户时出现此错误:

(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')),我会处理错误,但事实并非如此。

任何想法,我如何处理这个特定的错误?

标签: node.jsmongodbexpress

解决方案


您需要将异步操作包装在 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 })
}

推荐阅读