Page Contents
Page Contents

控制器(Controllers)

在 LoopBack 4 中,控制器 处理的是 API 的请求 - 响应生命周期。控制器上的每个函数都可以单独寻址,用以处理传入的请求(例如 /todos 对应的 POST 请求),函数方法内可以执行一些业务逻辑,并且返回一个响应。

Controller 是一个类,用于实现有应用的 API 定义的操作,它实现了应用的业务逻辑,并充当了 HTTP/REST API 和 域/数据库模型 之间的桥梁。

也就是说,控制器是大多数业务逻辑存在的地方。

有关控制器的更多信息,请参见 控制器.

创建控制器

您可以使用 CLI 创建 REST 控制器,如下所示:

lb4 controller
? Controller class name: todo
Controller Todo will be created in src/controllers/todo.controller.ts

? What kind of controller would you like to generate? REST Controller with CRUD functions
? What is the name of the model to use with this CRUD repository? Todo
? What is the name of your CRUD repository? TodoRepository
? What is the name of ID property? id
? What is the type of your ID? number
? Is the id omitted when creating a new instance? Yes
? What is the base HTTP path name of the CRUD operations? /todos
   create src/controllers/todo.controller.ts
   update src/controllers/index.ts

Controller Todo was created in src/controllers/

我们来看一下 src/controllers/todo.controller.ts 中的 Todo 控制器,每当接收到请求时,@repository 将检索并注入 TodoRepository 的实例。控制器对象的生命周期就是每个请求的生命周期,这意味着每个请求都将有一个新的控制器实例。最终,我们要注入 TodoRepository,因为创建这些实例比创建新的控制器实例要复杂得多。

在此示例中,两个新的装饰器会为 LoopBack 提供路由、动作和请求体的接收格式:

  • @post('/todos')@loopback/rest 创建元数据,以便在路径和动作匹配时可以将请求重定向到此函数上。
  • @requestBody() 将待办事项的 OpenAPI 架构与请求体相关联,以便 LoopBack 可以验证传入请求的格式。

有关此示例的其他注意事项:

  • @get('/todos/{id}') 这样的路由可以和 @param.path 配对,以在请求时将这些值注入处理程序的函数中。
  • LoopBack 的 @param 装饰器有一个完整包含其他“子装饰器”的命名空间,比如@param.path@param.query,和 @param.header ,它们允许为 REST 请求的相关部分指定元数据。
  • LoopBack 的 @param.path@param.query 还提供了子修饰符,用于指定某些值的基类型,例如 @param.path.number('id')

查看完整项目,请参见 Todo 示例.

现在我们已经连接了控制器,最后一步是将其全部绑定在Application中!

导航

上一步: 添加存储库

最后一步: 整合