具有多个中间件和分离层的快速路由

时间:2020-06-18 19:22:53

标签: node.js express middleware

我正在阅读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 个答案:

答案 0 :(得分:0)

1.2部分的要点是将业务逻辑创建为一个单独的,可测试的组件,该组件仅传递数据,而不传递reqres。这样一来,就可以对其进行单独和单独的测试,而无需使用Express环境。

您的呼叫:

stuffController.getStuffDone(req.body.stuff);

stuffController.getOtherStuffDone(req.body.otherStuff);

确实是在Web和业务逻辑之间进行了适当的分离,因为您没有将要求或资源传递给控制器​​。看起来符合1.2培训步骤的要求。

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