【问题标题】:How to convert Express errors into user-friendly message?如何将 Express 错误转换为用户友好的消息?
【发布时间】:2021-02-10 20:21:12
【问题描述】:

我不熟悉编码和学习 Node/Express,并尝试将 MongoDB 错误处理为用户友好的消息。

我在这里阅读了一篇类似的文章,但它处理的是在查询 MongoDB 之前清理猫鼬模式中的数据。

在 Postman 中,我在故意使用已在使用的用户名(在本例中为“johnsmith”)创建帐户(我正在使用 Mongoose)后收到以下错误。

我想根据错误发回“用户名已存在”或“电子邮件已在使用中”,而不是此错误对象。

是否可以直接使用中间件来实现这一点?

谢谢!

{
// Json error
    "driver": true,
    "name": "MongoError",
    "index": 0,
    "code": 11000,
    "keyPattern": {
        "username": 1
    },
    "keyValue": {
        "username": "johnsmith"
    }
}
// Express Code

router.post(`/api/user/create`, async (req, res) => {
    console.log(req.body)
    const user = await new User(req.body)
    
    try {
        await user.save()
        const token = await user.generateAuthToken()
        res.status(201).send({user, token})
    } catch (err) {
     
        res.status(400).send(err) 
    }
})

【问题讨论】:

    标签: javascript mongodb express mongoose middleware


    【解决方案1】:

    我不明白您为什么要在这里使用中间件。我也不认为有一个中间件可以“自动”为你做到这一点。 顺便说一句,您始终可以编写自己的中间件。

    但在您的具体情况下,我会在您要创建新用户的地方处理该问题。仅当您想在多条路由上处理某些事情时,中间件才有意义。

    因此,我会在您发现错误的地方直接处理该问题。 您已经知道当用户名已经存在时 mongoose 传递的错误是什么样子的,因此您可以测试这种情况,例如:

    } catch(err) {
        if(err.name === "MongoError" && "keyValue" in err && "username" in err.keyValue) {
           return res.status(409).send({message: "User already exists"})
        }
        else {
          return res.status(500).send(err)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-18
      • 2020-11-25
      • 1970-01-01
      • 2011-12-18
      • 1970-01-01
      • 1970-01-01
      • 2010-10-14
      相关资源
      最近更新 更多