node.js - Node:如何编写路由控制器
问题描述
我目前正在学习 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 });
}
}
有关更多详细信息,我建议您通过此链接。
推荐阅读
- vue.js - vue js 缩小与未缩小性能
- php - “make:fixtures”命名空间中没有定义命令
- docker - Docker:将文件复制到卷后无法启动 mssql windows 容器
- javascript - Webpack - Sass 加载器不编译 Sass
- c# - 首先使用代码使用 MVC5 实体框架更改密码
- javascript - 使 HTML 输入的第一个字符不可编辑 - javascript
- r - R语言保存深度学习模型
- r - 使用循环处理和格式化多个 .csv 文件
- node.js - 字符串数组是否接受带有nodejs API的mongodb中的对象?
- javascript - 如何使用 css 和 javascript 绘制围棋板