TypeStack/routing-controllers 用于 TypeScript:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeStack/routing-controllers 用于 TypeScript:完整指南及示例

\n\n

1. 这是什么以及为什么需要它

\n\n

TypeStack/routing-controllers 是一个强大的 TypeScript 库,它允许你使用装饰器在 Node.js 上创建服务器端应用程序。它提供了一种声明式的方式来定义路由(routes)、中间件、数据验证和序列化。无需手动为每个 HTTP 请求编写处理程序并将其与 Express 或 Koa 绑定,你只需用装饰器注解类和方法,该库就会自动生成所有必要的基础设施。

\n\n

为什么需要它?在现代 TypeScript 网页开发中,经常会出现代码重复和维护大型项目复杂性的问题。routing-controllers 通过提供一种基于类和装饰器的清晰、模块化架构来解决这个问题。这使得代码更具可读性、可测试性和可扩展性。你可以轻松地重用中间件,使用 class-validator 验证传入数据,并自动生成 OpenAPI (Swagger) 文档。

\n\n

该库与流行的框架(如 Express 和 Koa)紧密集成,并且是 TypeStack 生态系统的一部分,该生态系统还包括 class-validator、class-transformer 和 typedi。这允许你构建具有依赖注入、数据验证和转换功能的完整后端应用程序。

\n\n

2. 安装

\n\n

要安装该库及其依赖项,请在项目终端中执行以下命令:

\n\n
npm install routing-controllers reflect-metadata
\n\n

你还需要安装一个受支持的 HTTP 框架。推荐使用 Express 或 Koa:

\n\n
npm install express\nnpm install @types/express --save-dev
\n\n

或者对于 Koa:

\n\n
npm install koa\nnpm install @types/koa --save-dev
\n\n

不要忘记在你的 tsconfig.json 中启用实验性装饰器:

\n\n
{\n  "compilerOptions": {\n    "experimentalDecorators": true,\n    "emitDecoratorMetadata": true,\n    "target": "ES6",\n    "module": "commonjs",\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "strict": true\n  }\n}
\n\n

3. 快速入门 — 最小工作示例

\n\n

创建一个包含以下内容的文件 app.ts:

\n\n
import 'reflect-metadata';\nimport { createExpressServer, Get, Controller, Res } from 'routing-controllers';\nimport { Response } from 'express';\n\n@Controller()\nclass UserController {\n    @Get('/users')\n    getAll(@Res() response: Response) {\n        return response.json([{ id: 1, name: 'John Doe' }]);\n    }\n}\n\nconst app = createExpressServer({\n    controllers: [UserController],\n});\n\napp.listen(3000, () => {\n    console.log('Server is running on http://localhost:3000');\n});
\n\n

使用命令 npx ts-node app.ts 启动服务器,然后在浏览器中打开 http://localhost:3000/users。你将看到一个包含用户数组的 JSON 响应。

\n\n

4. 主要方法/函数/类

\n\n

4.1 @Controller

\n

签名: @Controller(basePath?: string)

\n

功能: 类装饰器,将类标记为控制器。接受一个可选的基路径,该路径将添加到类内的所有路由之前。

\n

工作示例:

\n
@Controller('/api')\nclass ApiController {\n    @Get('/status')\n    getStatus() {\n        return { status: 'OK' };\n    }\n}\n// 路由:GET /api/status
\n\n

4.2 @Get, @Post, @Put

推荐