如何将 Express 错误转换为用户友好的消息?
How to convert Express errors into user-friendly message?
我不熟悉编码和学习 Node/Express 并尝试将 MongoDB 错误处理成用户友好的消息。
我在这里阅读了一篇类似的文章,但它涉及在查询 MongoDB 之前清理 mongoose 模式中的数据。
在 Postman 中,我故意创建一个帐户(我正在使用 Mongoose)并使用已在使用的用户名后出现以下错误,在本例中为 'johnsmith'。
我想根据错误发回“用户名已存在”或“电子邮件已在使用”,而不是此错误对象。
是否可以直接使用中间件来完成此操作?
谢谢!
{
// 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)
}
})
我不明白你为什么要在这里使用中间件。我也不认为有中间件可以 'automagically' 为您做到这一点。
你总是可以编写自己的中间件顺便说一句。
但在您的特定情况下,我会在您要创建新用户的地方处理该问题。只有当你想处理多条路线上的东西时,中间件才有意义。
因此,我会在您发现错误的地方简单地处理该问题。
您已经知道当用户名已经存在时 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)
}
}
我不熟悉编码和学习 Node/Express 并尝试将 MongoDB 错误处理成用户友好的消息。
我在这里阅读了一篇类似的文章,但它涉及在查询 MongoDB 之前清理 mongoose 模式中的数据。
在 Postman 中,我故意创建一个帐户(我正在使用 Mongoose)并使用已在使用的用户名后出现以下错误,在本例中为 'johnsmith'。
我想根据错误发回“用户名已存在”或“电子邮件已在使用”,而不是此错误对象。
是否可以直接使用中间件来完成此操作?
谢谢!
{
// 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)
}
})
我不明白你为什么要在这里使用中间件。我也不认为有中间件可以 'automagically' 为您做到这一点。 你总是可以编写自己的中间件顺便说一句。
但在您的特定情况下,我会在您要创建新用户的地方处理该问题。只有当你想处理多条路线上的东西时,中间件才有意义。
因此,我会在您发现错误的地方简单地处理该问题。 您已经知道当用户名已经存在时 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)
}
}