在服务中使用res和req的Node.js

时间:2018-07-02 10:55:19

标签: javascript node.js service routes

关于如何处理node.js中的服务和路由,我有一个一般性的问题。您将直接在服务中处理响应还是将其留给路由?这就是我在代码中的意思

喜欢这个

路线

router.get('/', (req, res, next) ==> {
   someService.someMethod(req, res);
});

服务

const someMethod = (req, res) => {
   try {
      var something = await someOtherMethod(req.body.someParameter);
      return res.status(200).send(something.data);
   } catch (err) {
      return res.status(500).send({msg: err.message});
   }
}

或者这个

路由器

router.get('/', (req, res, next) ==> {
   try {
      var something = await someService.someMethod(req.body.someParameter);
      res.status(200).send(something.data);
   } catch (err) {
      res.status(500).send({msg: err.message})
   }
});

服务

const SomeMethod = (Input) => {
   return someOtherMethod(Input);
}

第一种方法将使路由器更加简单和整洁,特别是如果在多条路径中使用服务时,但缺点是我总是需要提供res和req,如果我想使用该服务会遇到问题内部。我倾向于第二种方法。

您如何设计服务?

2 个答案:

答案 0 :(得分:1)

我会去localmap.on('click', getPosition);

router.get('/', RootController)

通过这种方式,您可以将关注点分离-您的根控制器仅负责处理const RootController = (req, res) => { // extract what you need from the request const param = req.body.param; // calculate what you need in a pure function `businessLogic` const result = businessLogic(param); // send the response return res.send(result); } 个请求-获取请求的响应。所有“业务逻辑”都是在一个纯函数中完成的(您可以轻松地对其进行测试,而无需任何HTTP请求上下文/模拟,它可以在其他地方重用,例如在不同的控制器中使用)。

答案 1 :(得分:1)

我使用以下架构: 1.路线           2.控制器                         3.服务

您的路线是验证输入的路线,您的控制器是处理所有逻辑并调用服务并将最终结果返回给您的路线的路线。