Typescript express 新手教程 S2 控制器

控制器

温情提示:过强的控制欲会导致控制者与受控双方的心理变态

太长不看

这个让人感到莫名其妙的名字会加重你的误解,是因为有一个 MVC 设计模式的 上下文没有引入
根据MVC的基本定义,(model,view,controller)
控制器是接受输入信息并加以处理再供model和view 使用
那么 视图器 接受 控制器的数据,然后渲染给用户看
而 模型器 包含了对数据的处理逻辑和某些规则(如果有的话),使用对应逻辑处理数据

所以到底什么是控制器

我们之前提到的路由 app.get('/',someHandleFn)可以接受客户端信息,然后处理并响应出可以用于渲染视图的数据,那么它可以是一种控制器。

但是要经历一些包装

下面是一些十分富有文学性的意识流描述。
你这个人真是无聊透的,我已经知道路由怎么用了,还能给客户端发送Hello world,你还非要我学习什么狗屁controller,是不是脑袋有问题。
就算路由特别多,我可以把同一类业务的路由放到子路由中,再挂载到主路由上,为什么非要脱裤子放屁一样地把子路由的东西放到控制器里呢?

好问题!

使用控制器的优点

  • 有明确接口,子路由没有
  • 有明确含义,子路由没有
  • 有明确类型,子路由没有

说了那么多,实际上就是把逻辑类似的程序的功能给抽象出来,再给他起个名字==> 控制器,那么控制器以内,海阔凭鱼跃,控制器以外,只剩下M和V,架构陡然清晰了有木有。

这里有一个前提,小小的前提,就是知道子路由和主路由的使用方式,当然这个名字是我自己起的。

// 主路由使用子路由router ,注意第一个参数"/" 
app.use("/",router);
// 另一个文件 Router1.ts 中
const router = Router()
router.get("/somePath",someHandleFn)

上面的内容介绍了express的较为复杂的路由的组织方式

// 这是一个控制器雏形
 class PostController implements Controller {
  router: Router;
  path: string;
  constructor() {
    this.router = Router();
    this.path= "/aChildRoute"
    this.router.get(this.path, (req, res) => {
      res.send("注意虚空,站位分散");
    });
  }
}

上面是一个控制器的雏形,请思考:

  • 如何使用控制器
    • 这个使用者要有什么功能
    • 他是一个函数,一个类还是 一段松散的程序文本?

提普斯

  • 要使用express.json()中间件来获取req.body当中的json数据
  • 当使用postman测试接口的时候,需要先设置 header 的content-Type 为application/json ,再到body项,选择raw,同时把数据格式设置成JSON (随着版本变化可能变化)
posted @ 2022-02-07 21:08  刘老六  阅读(99)  评论(0编辑  收藏  举报