我正在阅读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
答案 0 :(得分:0)
1.2部分的要点是将业务逻辑创建为一个单独的,可测试的组件,该组件仅传递数据,而不传递req
和res
。这样一来,就可以对其进行单独和单独的测试,而无需使用Express环境。
您的呼叫:
stuffController.getStuffDone(req.body.stuff);
和
stuffController.getOtherStuffDone(req.body.otherStuff);
确实是在Web和业务逻辑之间进行了适当的分离,因为您没有将要求或资源传递给控制器。看起来符合1.2培训步骤的要求。
我在这里看到的一件事是,这些函数调用中的任何一个都没有任何输出。它们不返回任何内容,并且由于您没有将req
或res
传递给它们,因此它们不能像其他中间件一样修改req
对象,并且不能自己发送响应或错误。因此,似乎它们需要一种将某种类型的结果传递回来的机制,或者是直接返回值(如果函数是同步的),或者是返回诺言(如果函数是异步的)。然后,调用代码可以得到其结果,并对该结果进行处理。