在现代 Web 应用程序开发中,基于 TypeScript 的后端框架越来越受欢迎,其中一个很受欢迎的选择是 routing-controllers。 routing-controllers 是一个基于 Typescript 的 Node.js Web 框架,允许开发者使用注释使控制器可以配合不同的 Web 框架使用,例如 express、koa 和 fastify。routing-controllers 提供了一种类似于 Spring MVC 或 Ruby on Rails 的路由控制器基元,使开发者能够专注于应用程序的处理逻辑。
本文将介绍 npm 包 routing-controllers 的使用,并提供一份详细的教程,帮助您在 Node.js 中通过 TypeScript 构建出高效且易于维护的 Web 应用程序。
路由 (Routing)
路由是 Web 应用程序中非常重要的一部分,通常是决定如何处理 HTTP 请求的核心机制。routing-controllers 允许您使用装饰器(decorators)配置控制器和方法,从而提供更加便捷的路由配置方式。这样可以使您的代码更加清晰易懂,同时也更加灵活。
例如,使用 routing-controllers 声明 GET 请求的 /users
路由的控制器和方法如下所示:
-- -------------------- ---- ------- ------ - --------------- --- - ---- ---------------------- ------------------------- ------ ----- -------------- - --------- -------- - -- ------ --- ----- - -展开代码
在上面的示例中,我们使用了 JsonController
装饰器来定义一个控制器,控制器名称是 UserController,并将其设置为 /users
。然后,我们使用 @Get
装饰器定义在 /users
控制器下的方法 getAll
。如果此时向 http://localhost:3000/users
发送 GET 请求,将会执行 getAll
方法。
类似的,可以使用其他 HTTP 方法来定义路由。以下是示例代码:
-- -------------------- ---- ------- ------ - ----------- ---- ----- --- - ---- ---------------------- ------------- ------ ----- -------------- - -------------- -------- - -- ------ --- ----- - --------------- ----------- ---- ---- - -- ------ - --- ---- - -展开代码
中间件 (Middleware)
中间件是另外一个非常重要的概念,它允许开发者在请求到达路由之前、处理之前或区分一些请求对路由做出特殊操作。在 routing-controllers 中,您可以很容易地配置和使用中间件来拦截和处理 HTTP 请求。
以下是通过在控制器类级别和方法级别注册的中间件运行的示例代码:
-- -------------------- ---- ------- ------ - ----------- ---- --------- - ---- ---------------------- -------- ----------- ---- ---- ---- ----- ---- - ------------------- ---------------------- ------------- ------------- ------- - ------------- ------------------ ------ ----- -------------- - -------------- -------- - -- ------ --- ----- - -展开代码
在上面的示例代码中,定义了一个全局的 logger 中间件,它记录了每个请求的 HTTP 方法和 URL,然后使用 @UseBefore
装饰器将其使用到 UserController 控制器上。
输入数据转化 (Input Data Conversion)
当然,传入的 HTTP 请求很少直接使用它们接收到的数据,因为这些数据的格式可能需要进行转换和验证。routing-controllers 允许您在控制器和方法级别上使用类似 DTO (Data Transfer Object,数据传输对象) 的模式来定义输入数据,并从原始数据中自动从生成这些 DTO 对象。例如:
-- -------------------- ---- ------- ------ - --------------- ----- ---- - ---- ---------------------- ----- ------------- - ---------- ------- --------- ------- ------ ------- --------- ------- - ------------------------- ------ ----- -------------- - ---------- ------------------ ----- -------------- - ------------------ -- ------ - --- ---- ---- ------------ ---- - -展开代码
在上面的示例中,CreateUserDto
提供了一个可以被序列化和反序列化的对象格式,它有 firstName
、lastName
、email
和 password
这样几个属性。此后,我们使用 @Body
装饰器,将 HTTP 请求中的数据体自动注入到 createUser
方法中,同时也将这些数据从原始数据进行了类型转换。
总结
总而言之,routing-controllers 是一个优秀的 Node.js Web 框架,允许您使用 TypeScript 构建高效且可维护的 Web 应用程序。在本文中,我们简要介绍了 routing-controllers 的几个核心概念,如路由、中间件和输入数据转换。如果您是 Node.js 开发者或使用 TypeScript 编写 Web 应用程序,则可以考虑使用 routing-controllers,这样可以使得代码更加清晰易懂。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/198461