首页 > 解决方案 > 具有多个中间件和分离层的快速路由

问题描述

我正在阅读 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

标签: node.jsexpressmiddleware

解决方案


1.2 节的重点是将您的业务逻辑创建为一个单独的、可测试的组件,该组件仅传递数据,而不是传递reqres. 这允许在没有 Express 环境的情况下对其进行独立和单独的测试。

您的来电:

stuffController.getStuffDone(req.body.stuff);

stuffController.getOtherStuffDone(req.body.otherStuff);

确实在 web 和业务逻辑之间进行了适当的分离,因为您没有将 req 或 res 传递给您的控制器。这看起来符合 1.2 训练步骤的要点。

我在这里看到缺少的一件事是这些函数调用中的任何一个都没有任何输出。它们不返回任何东西,并且由于您不传递req或传递res给它们,因此它们不能修改req对象(就像某些中间件那样),也不能自己发送响应或错误。因此,这些似乎需要一种机制来传达某种类型的结果,或者直接返回值(如果函数是同步的)或返回承诺(如果函数是异步的)。然后,调用代码可以得到他们的结果并用这个结果做一些事情。


推荐阅读