TypeStack/routing-controllers 用于 TypeScript:完整指南及示例
\n\n1. 这是什么以及为什么需要它
\n\nTypeStack/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。这允许你构建具有依赖注入、数据验证和转换功能的完整后端应用程序。
2. 安装
\n\n要安装该库及其依赖项,请在项目终端中执行以下命令:
\n\nnpm install routing-controllers reflect-metadata\n\n你还需要安装一个受支持的 HTTP 框架。推荐使用 Express 或 Koa:
\n\nnpm install express\nnpm install @types/express --save-dev\n\n或者对于 Koa:
\n\nnpm install koa\nnpm install @types/koa --save-dev\n\n不要忘记在你的 tsconfig.json 中启用实验性装饰器:
{\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\n3. 快速入门 — 最小工作示例
\n\n创建一个包含以下内容的文件 app.ts:
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 响应。
4. 主要方法/函数/类
\n\n4.1 @Controller
\n签名: @Controller(basePath?: string)
功能: 类装饰器,将类标记为控制器。接受一个可选的基路径,该路径将添加到类内的所有路由之前。
\n工作示例:
\n@Controller('/api')\nclass ApiController {\n @Get('/status')\n getStatus() {\n return { status: 'OK' };\n }\n}\n// 路由:GET /api/status\n\n