node.js - 从另一个控制器调用控制器是一个坏主意吗?
问题描述
我正在使用 node.js 和 express.js 构建一个 Web 服务,并第一次尝试使用 MVC 架构。
我有一个用户发送到特定路由的 html 表单(假设 POST 到 /formprocessing)。在后端,当我收到表单数据时,我必须执行几项任务。
- 首先我将数据保存在数据库中
- 然后我必须做一些数据处理
- 最后,我向客户端发送了一个 zip 文件
因此,一开始我将代码拆分到不同的控制器中,以便每个控制器执行一项任务。例如,formController 将数据保存在 de db 中,processingController 进行一些计算,然后 zipController 将 zip 文件发送给客户端。但是,现在我在处理请求时尝试将所有三个部分放在一起,但我在互联网上发现我不应该从另一个组件调用一个组件(从另一个调用控制器)。那么我应该使用哪种正确方法?将控制器包装为实用函数并仅从一个控制器调用它们?
解决方案
的想法Controller
是,这是一个处理应用程序传输层的实体。理想情况下,唯一调用 Controller 的应该是您的传输层,例如 HTTP 请求,因为它通常包含一些特定于传输层的代码。
通常应用程序具有三个级别,Controller
,Services
,Models
。
Controller
处理传输层并调用一些Services
.Service
包含业务逻辑并与之交互以Models
将更改持久保存在数据库中。Models
与数据库交互。
因此,当您需要在控制器中执行某些操作时,您将使用Service
与传输层无关的操作。所以你可以有服务A
,它需要做一些服务,B
你可以使用服务B
内部的服务方法A
来实现它所需要的,而无需调用控制器。
PS 这里有一些对你有用的读物 https://dev.to/santypk4/bulletproof-node-js-project-architecture-4epf
推荐阅读
- python - 在 loglog 轴中拟合指数函数的稳健方法
- node.js - 删除 PDFKit 底部的所有空间
- python - 我想运行这个命令——pip3 install rarfile。但它不起作用并给出以下结果
- javascript - 无法访问弹出窗口元素...返回 null
- function - 函数中的 Dart 函数
- php - 使用 template_redirect 重定向 WooComm 页面
- python - Passing Python objects as arguments to tkinter's Entry validatecommand
- julia - 检查 Flux.jl 模型中的参数总数?
- python - How to display a Sympy matrix?
- java - RxJava 不显示数据