如何解决节点:如何编写路由控制器
我目前正在学习 MERN,在学习了一些教程后,我想知道有关后端路由设置的最佳实践是什么。
- 将路由与其逻辑分开真的有用/重要吗?
- 关于控制器的最佳实践是什么(这就是老师所说的路由逻辑)
(req,res) => {
Exercise.find()
.then(exercises => res.json(exercises))
.catch(err => res.status(400).json('Error: ' + err));
});
或
(req,res) => {
try {
const exercises = Exercises.find();
res.status(200).json(exercises);
} catch {
res.status(404).json({ message: error.message });
}
}
解决方法
将路由与其逻辑分开真的有用/重要吗?
我不打算详细介绍。但是有一个控制器、路由配置和视图的概念有助于明确职责分离。路由配置负责初始化路由并将其与控制器相关联。控制器负责从路由中获取输入并调用适当的操作来执行。如果此特定控制器负责 API 端点,则这些操作可以是任何操作,例如涉及呈现视图或调用服务。
关于控制器的最佳实践是什么(这就是 老师在路由上调用了逻辑)
如果您遵循推荐的使用方法,没有最好或最坏的写作方式。
例如,只要您使用一两个 then,如果出现任何错误并且它是可读的,您实际上可以调试似乎没问题:
(req,res) => {
Exercise.find()
.then(exercises => res.json(exercises))
.catch(err => res.status(400).json('Error: ' + err));
});
但是,如果您有多个 then 相互嵌套,那么调试将非常困难:
Exercise.find()
.then(exercises => {res.json(exercises)
})
.then(exercises => {res.json(exercises);
.// more steps to get the final values.
.
.then(exercises => {res.json(exercises);
.catch(err => res.status(400).json('Error: ' + err));
现在,这段代码:
(req,res) => {
try {
const exercises = Exercises.find();
res.status(200).json(exercises);
} catch {
res.status(404).json({ message: error.message });
}
}
您将无法获得 exercises
中的值,因为它是一个必须被解析或拒绝才能获得值的承诺。此外,try/catch 在这里不起作用,因为这是异步代码,您将无法捕获错误。要检查错误和值,您需要使用上面的 then/catch 表示法。
但是,我们可以通过使用 async/await 来简化此现有代码,您可以在其中使用 try/catch :
async (req,res) => {
try {
const exercises = await Exercises.find();
res.status(200).json(exercises);
} catch {
res.status(404).json({ message: error.message });
}
}
有关详细信息,我建议您阅读此link。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。