node.js - 具有多个中间件和分离层的快速路由
问题描述
我正在阅读 GitHub https://github.com/goldbergyoni/nodebestpractices并尝试在我的项目中应用这些技巧。目前我正在研究“ 1.2 层你的组件,让 Express 在其边界内”提示,但我有一个问题。
我正在使用路由/控制器,并使用此技巧(1.2),具有多个中间件的路由将如下所示。
router.post("/do-multiple-stuff",
(req, res, next) => {
stuffController.getStuffDone(req.body.stuff);
next();
},
(req, res, next) => {
stuffController.getOtherStuffDone(req.body.otherStuff);
return res.send("stuff done");
});
这个对吗?或者有更好的方法来做到这一点?
谢谢!<3
解决方案
1.2 节的重点是将您的业务逻辑创建为一个单独的、可测试的组件,该组件仅传递数据,而不是传递req
和res
. 这允许在没有 Express 环境的情况下对其进行独立和单独的测试。
您的来电:
stuffController.getStuffDone(req.body.stuff);
和
stuffController.getOtherStuffDone(req.body.otherStuff);
确实在 web 和业务逻辑之间进行了适当的分离,因为您没有将 req 或 res 传递给您的控制器。这看起来符合 1.2 训练步骤的要点。
我在这里看到缺少的一件事是这些函数调用中的任何一个都没有任何输出。它们不返回任何东西,并且由于您不传递req
或传递res
给它们,因此它们不能修改req
对象(就像某些中间件那样),也不能自己发送响应或错误。因此,这些似乎需要一种机制来传达某种类型的结果,或者直接返回值(如果函数是同步的)或返回承诺(如果函数是异步的)。然后,调用代码可以得到他们的结果并用这个结果做一些事情。
推荐阅读
- python - 绘制 multiIndex 列数据框
- javascript - 标记不响应某些触摸设备中的 on("click") 事件
- swiftui-navigationlink - 无法按下导航链接swiftui的边缘
- javascript - 如何使用 Firebase 身份验证修复登录错误
- flutter - 消费者不使用 Riverpod ChangeNotifier 重建 UI
- surveyjs - Surveyjs:获取以前的问题标题以生成问题
- python - 变量作为具有多个值的数据库表名
- python - 如何将模型和声音加载到我的可分发文件中?
- python - 如何在python的行列式中传播错误
- firebase - 使用密码身份验证向用户添加电子邮件链接身份验证时,linkWithCredential 会引发提供程序已链接的错误