【问题标题】:Where put business logic on a Node+Express.js RESTApi将业务逻辑放在 Node+Express.js REST Api 上的位置
【发布时间】:2019-05-14 22:51:48
【问题描述】:

我有以下 Node+Express.js RESTApi 架构:

- controllers
- db
-- models
-- config
-- migrations
- helpers
- routes
- services
- test
package.json
index.js

放置业务规则的正确位置在哪里? (控制器、模型、服务?)

【问题讨论】:

  • 我不太确定,但我将业务逻辑拆分为模型和控制器,主要在模型上
  • 只有一个地方可以放你的业务逻辑是控制器,因为模型是响应数据库通信的,路由器是用来定义你的路由的,服务是用来交换信息的。

标签: javascript node.js express model-view-controller


【解决方案1】:

对 ExpressJS 来说有点新,好在它不像 Rails 和通常的 PHP 框架那样规范如何组织代码。

我正在这样构建我的代码:

  • 路由:根据之前的评论:将 API 调用定向到正确的控制器函数
  • 控制器:接收带有请求的 API 调用。数据,在API调用的上下文中做一些验证(http相关,例如:API auth等)
  • 服务:控制器然后调用包含业务逻辑的服务。这个想法是服务(业务逻辑)不依赖于控制器和请求。数据。服务接收它需要的数据(从请求中提取的数据,可能还有其他东西)并返回控制器可以用于 res 的其他数据。数据。

【讨论】:

  • 除了关注点分离之外,将业务逻辑与所有其他组件/目录/等分离的目标是使其可被其他组件重用。如果业务逻辑在一个控制器中,它很可能只能被它所在的单个控制器重用。因此,将业务逻辑放在“服务”目录中可以实现这一点。
【解决方案2】:

从你的文件夹结构来看,这就是我将如何做到的。 P.S 这就是我认为仅通过阅读文件夹名称来了解您的项目结构的方式,这并不完美,但也许可以帮助您。

- controllers -> logic before saving to the db, check permission, etc..
- db
-- models -> all the stuff who touch a models himself, the schema,etc
-- config -> config about the db, connection to the db etc
-- migrations -> all the migrations file for the db
- helpers -> helpers function like sum, total, pluralize, etc
- routes -> all the rest api route, where they take a controller as callback
- services -> stripe, aws s3 etc
- test -> all your test
package.json -> all your dependencies
index.js -> where everything start, your server instance etc

因此,在您的情况下,业务逻辑进入控制器。模型可用于添加触及 db 值等的逻辑。

【讨论】:

  • 谢谢!你能给我一些“触及 db 值的模型逻辑等”的例子吗?
  • @EQuimper 感谢您的简短解释。迁移文件夹下有什么?你可以给我一个关于迁移是什么样子的提示,以便我可以进一步谷歌它。
  • @DouglasMorais 示例对用户密码进行哈希处理,将哈希密码与提供的密码进行比较等。
  • @AbhishekPathak 如果您使用 sql 数据库,这是您的数据库的迁移。例如,如果您使用 Knex knexjs.org/#Migrations
  • 我不敢相信没有人支持这么好的答案,你们评论员到底在做什么?
猜你喜欢
  • 2011-10-16
  • 2016-01-18
  • 2017-04-02
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2019-05-22
  • 2014-10-23
  • 2011-01-30
相关资源
最近更新 更多