有勇气的牛排博客

Typescript Express 服务端框架搭建

有勇气的牛排 5779 TypeScript 2024-11-22 21:48:48

1 前言

TypeScript 的 Express 服务端框架是一种结合了 TypeScript 静态类型检查特性和 Express 的轻量级、高效 Web 框架的开发方式。它适合构建现代化、可维护性高的后端服务。

1.1 什么是 Express?

Express 是一个基于 Node.js 的轻量级 Web 框架,特点如下:

  • 轻量和灵活:提供了路由、请求处理、中间件等基础功能。
  • 丰富的中间件生态:支持各种功能扩展,如身份验证、日志记录、静态文件服务等。
  • 快速开发:简洁的 API 设计适合快速构建服务。

1.2 为什么使用 TypeScript 搭配 Express?

TypeScript 为 Express 增强了静态类型支持,带来了以下好处:

  • 类型安全:通过类型检查减少运行时错误。
  • 代码提示:更智能的代码补全和提示,提高开发效率。
  • 面向对象编程:支持类、接口等高级特性,代码更易维护。
  • 可维护性:大项目中,类型系统可以显著降低代码复杂性。

1.3 基础架构

搭建一个基于 TypeScript 的 Express 项目,一般包括以下部分:

  • 入口文件:初始化服务器,配置路由和中间件。
  • 路由模块:定义各个 API 路由。
  • 控制器模块:处理具体的业务逻辑。
  • 服务层:封装具体功能(如数据库操作)。
  • 中间件:处理日志、身份验证、错误捕获等通用功能。
  • 配置文件:管理环境变量、数据库配置等。

2 初始化项目

mkdir ts-server cd ts-server npm init -y npm install express npm install -D typescript @types/node @types/express ts-node-dev

3 配置 TypeScript

{ "compilerOptions": { "target": "ES6", "module": "commonjs", "rootDir": "./src", "outDir": "./dist", "strict": true, "esModuleInterop": true }, "include": ["src"] }

4 创建 TypeScript 文件

mkdir src touch src/server.ts

4.1 服务端代码src/server.ts

import express, { Request, Response } from 'express'; const app = express(); const PORT = 3000; // 中间件 app.use(express.json()); // 定义 /test 路由 app.get('/test', (req: Request, res: Response) => { res.json({ message: '有勇气的牛排,nodejs服务端测试' }); }); // 启动服务 app.listen(PORT, () => { console.log(`Server is running at http://localhost:${PORT}`); });

5 package.json添加配置

"scripts": { "dev": "ts-node-dev src/server.ts" }

6 执行

npm run dev

http://localhost:3000/test

image.png

7 代码优化

7.1 通用json返回封装

ResponseUtil.ts

// utils/ResponseUtil.ts class ResponseUtil { // 返回成功的 JSON 响应 static success(res: any, data: any, message: string = '查询成功', code: number = 20000): void { res.json({ code, msg: message, data }); } static fail(res: any, message: string = '失败', code: number = -1): void { res.json({ code, msg: message }); } // 返回失败的 JSON 响应 static error(res: any, message: string = '请求失败', code: number = 50000): void { res.status(500).json({ code, msg: message, data: null }); } } export default ResponseUtil;

7.2 路由分离

参考Java服务端分层设计理念。

ExampleController.ts

import { Request, Response, Router } from 'express'; import ResponseUtil from '../utils/ResponseUtil'; // 导入 ResponseUtil 类 const router = Router(); // 获取用户信息 // http://localhost:3000/api/v1/test6 router.get('/test6', async (req: Request, res: Response) => { ResponseUtil.success(res, {}, "查询成功", 20000); }); export default router;

server.ts 注册路由

import ExampleController from "./controller/ExampleController"; app.use('/api/v1', CodeEncryController);

留言

专栏
文章
加入群聊