我已经设置了一个简单的Node / Express服务,可以为数据库创建新的书签。
在我的书签架构中,其中一个字段url具有验证。当您尝试在没有正确验证的情况下创建新书签时,会抛出错误和消息。
E.g。如果您没有为请求提供网址,则会发出消息Please provide a url.
POST请求创建新书签的路径:
app.post(
'/api/bookmarks',
(req, res) => {
const { url, tags } = req.body;
const bookmark = new Bookmark({
url,
tags
});
bookmark.save()
.then(res => {
res.send(result)
})
.catch(error => {
console.log("err:", error);
res.status(400).send(error)
});
}
);
我的书签架构是什么样的:
const bookmarkSchema = new Schema({
url: {
type: String,
required: [true, "Please provide a URL."],
match: [urlRegex, "Your URL is invalid. Please make sure to add www."]
},
tags: [String]
});
当我在前端客户端上进行API调用时(例如通过React),我能够捕获错误和后续消息(Please provide a URL.
),但正如您所看到的,我必须调用{{ 1}}这看起来非常冗长和冗长。
err.response.data.errors.url.message
我在想什么 - 有更好的方法来渲染错误吗?是否更好地处理客户端错误?
我对错误处理很陌生,所以想知道什么是最佳做法。
谢谢!
答案 0 :(得分:0)
像这样的东西。所以你不必在架构中检查它。
app.post(
'/api/bookmarks',
(req, res) => {
const { url, tags } = req.body;
if (!url) {
res.status(400).send({error: "URL is missing"})
return;
}
if (!url.match(urlRegex) {
res.status(400).send({error: "URL is not valid"})
return;
}
const bookmark = new Bookmark({
url,
tags
});
bookmark.save()
.then(res => {
res.send(result)
})
.catch(error => {
console.log("err:", error);
res.status(500)
});
}
);
将服务器端错误发送到前端是一种不好的做法。这是泄漏有关数据库/后端信息的简单方法。您应该发送自己的字符串消息而不是捕获错误。