You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将API从ExpressJS迁移至NestJS?第一步该如何操作?

从ExpressJS迁移到NestJS:实操指南

核心迁移思路

NestJS本身基于Express构建,因此渐进式迁移是最优方案——不用一次性重写所有代码,而是保留现有Express路由的同时,逐步将业务模块迁移到Nest的架构中,确保服务持续可用。


迁移第一步:搭建兼容环境与基础架构

这一步的核心是让Nest项目与现有Express代码共存,同时梳理业务结构,为后续迁移铺路。具体操作如下:

1. 初始化Nest项目并整合现有Express服务

  • 用Nest CLI创建新项目:
    nest new nest-migration
    
  • 将现有Express项目的核心代码(业务逻辑、数据库操作、工具函数等)复制到Nest项目的src目录,暂时保留原有文件结构。
  • 在main.ts中整合Express实例,让Nest和原有Express路由同时运行:
    import { NestFactory } from '@nestjs/core';
    import { AppModule } from './app.module';
    import * as express from 'express';
    // 导入你的现有Express应用(比如原来的app.js导出的express实例)
    import legacyApp from '../path-to-express-project/app';
    
    async function bootstrap() {
      // 创建Express服务器实例
      const server = express();
      // 将原有Express路由挂载到Nest的子路径下(比如/legacy)
      server.use('/legacy', legacyApp);
      // 基于现有Express服务器创建Nest应用
      const app = await NestFactory.create(AppModule, server);
      await app.listen(3000);
    }
    bootstrap();
    
  • 启动项目测试:访问原有Express路由(如/legacy/api/users)和Nest默认路由(如/),确认两者都能正常响应。

2. 梳理现有Express路由与业务模块映射

  • 整理所有Express路由,按业务领域分组:
    # 示例分组
    用户模块:
    - GET /api/users → 获取用户列表
    - POST /api/users → 创建用户
    - GET /api/users/:id → 获取单个用户
    
    订单模块:
    - GET /api/orders → 获取订单列表
    - POST /api/orders → 创建订单
    
  • 每个业务分组对应Nest中的一个Module(比如用户分组对应UsersModule),这是Nest架构的核心单元。

3. 搭建Nest基础模块结构

  • 用Nest CLI为每个业务领域创建模块、控制器和服务:
    # 创建用户模块
    nest g module users
    # 创建用户控制器(处理路由)
    nest g controller users
    # 创建用户服务(处理业务逻辑)
    nest g service users
    
  • 确保模块依赖清晰:比如如果用户模块需要数据库连接,就将数据库模块(如MongooseModule)导入到UsersModule的imports数组中。

4. 验证第三方依赖兼容性

  • 检查现有Express项目使用的第三方库(如mongoose、axios、bcrypt):Nest对绝大多数Node.js库完全兼容,无需替换,直接在Nest的服务或控制器中调用即可。
  • 替换Express特定中间件:比如将express.json()替换为Nest内置的请求体解析(通过@Body()装饰器自动实现),或直接在main.ts中保留原有中间件配置。

后续迁移建议

完成第一步后,可以逐步将单个业务路由从Express迁移到Nest控制器:

  1. 复制原有Express路由的业务逻辑到Nest对应服务中
  2. 在Nest控制器中用@Get()、@Post()等装饰器定义路由
  3. 测试通过后,移除对应Express路由,直至完全迁移完成

内容的提问来源于stack exchange,提问作者Ramet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:25:31