返回

后端服务搭建:从0开始构建Typescript+Express+Sequelize+Swagger+PM2+Docker的项目环境

后端

  1. 初始化项目

    1. 新建项目

      • 使用终端命令行导航到您想要创建项目的工作目录。
      • 运行以下命令创建新的项目:
      mkdir my-project
      cd my-project
      
    2. 安装必要的依赖

      • 运行以下命令安装必要的依赖项:
      npm init -y
      npm install typescript express sequelize swagger pm2 dockerfile-generator
      
    3. 配置TypeScript

      • 创建tsconfig.json文件,并添加以下配置:
      {
        "compilerOptions": {
          "target": "es5",
          "module": "commonjs",
          "outDir": "./dist",
          "sourceMap": true,
          "strict": true,
          "noImplicitAny": true,
          "esModuleInterop": true,
          "allowSyntheticDefaultImports": true
        },
        "include": [
          "src"
        ]
      }
      
  2. 使用Sequelize连接数据库

    1. 安装Sequelize:
    npm install sequelize
    
    1. 创建models目录,并在其中创建模型文件。例如,创建一个名为User.ts的文件,并添加以下代码:
    import { Sequelize, DataTypes } from 'sequelize';
    
    const sequelize = new Sequelize('database', 'username', 'password', {
      dialect: 'mysql',
      host: 'localhost',
      port: 3306
    });
    
    const User = sequelize.define('User', {
      id: {
        type: DataTypes.INTEGER,
        autoIncrement: true,
        primaryKey: true
      },
      name: {
        type: DataTypes.STRING,
        allowNull: false
      },
      email: {
        type: DataTypes.STRING,
        allowNull: false,
        unique: true
      },
      password: {
        type: DataTypes.STRING,
        allowNull: false
      }
    });
    
    export default User;
    
    1. 同理,您可以创建其他模型文件。
  3. 使用Swagger生成API文档

    1. 安装Swagger:
    npm install swagger-jsdoc swagger-ui-express
    
    1. 创建swagger.json文件,并添加以下配置:
    {
      "openapi": "3.0.0",
      "info": {
        "title": "My API",
        "version": "1.0.0"
      },
      "paths": {
        "/users": {
          "get": {
            "summary": "Get all users",
            "responses": {
              "200": {
                "description": "OK",
                "content": {
                  "application/json": {
                    "schema": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/User"
                      }
                    }
                  }
                }
              }
            }
          },
          "post": {
            "summary": "Create a new user",
            "requestBody": {
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/User"
                  }
                }
              }
            },
            "responses": {
              "201": {
                "description": "Created",
                "content": {
                  "application/json": {
                    "schema": {
                      "$ref": "#/components/schemas/User"
                    }
                  }
                }
              }
            }
          }
        },
        "/users/{id}": {
          "get": {
            "summary": "Get a user by ID",
            "parameters": [
              {
                "name": "id",
                "in": "path",
                "required": true,
                "schema": {
                  "type": "integer"
                }
              }
            ],
            "responses": {
              "200": {
                "description": "OK",
                "content": {
                  "application/json": {
                    "schema": {
                      "$ref": "#/components/schemas/User"
                    }
                  }
                }
              }
            }
          },
          "put": {
            "summary": "Update a user by ID",
            "parameters": [
              {
                "name": "id",
                "in": "path",
                "required": true,
                "schema": {
                  "type": "integer"
                }
              }
            ],
            "requestBody": {
              "content": {
                "application/json": {
                  "schema": {
                    "$ref": "#/components/schemas/User"
                  }
                }
              }
            },
            "responses": {
              "200": {
                "description": "OK",
                "content": {
                  "application/json": {
                    "schema": {
                      "$ref": "#/components/schemas/User"
                    }
                  }
                }
              }
            }
          },
          "delete": {
            "summary": "Delete a user by ID",
            "parameters": [
              {
                "name": "id",
                "in": "path",
                "required": true,
                "schema": {
                  "type": "integer"
                }
              }
            ],
            "responses": {
              "204": {
                "description": "No Content"
              }
            }
          }
        }
      },
      "components": {
        "schemas": {
          "User": {
            "type": "object",
            "properties": {
              "id": {
                "type": "integer",
                "format": "int64"
              },
              "name": {
                "type": "string"
              },
              "email": {
                "type": "string"
              },
              "password": {
                "type": "string"
              }
            }
          }
        }
      }
    }
    
    1. 在您的Express应用程序中使用Swagger:
    const swaggerJSDoc = require('swagger-jsdoc');
    const swaggerUi = require('swagger-ui-express');
    
    const options = {
      swaggerDefinition: {
        openapi: '3.0.0',
        info: {
          title: 'My API',
          version: '1.0.0'
        }
      },
      apis: ['./src/routes/*.ts']
    };
    
    const specs = swaggerJSDoc(options);
    
    app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(specs));
    
  4. 使用PM2管理进程

    1. 安装PM2:
    npm install pm2 -g
    
    1. 在您的项目根目录下创建一个名为pm2.json的文件,并添加以下配置:
    {
      "apps": [
        {
          "name": "my-project",
          "script": "src/index.ts",
          "env": {
            "NODE_ENV": "production"
          }
        }
      ]
    }
    
    1. 使用以下命令启动PM2:
    pm2 start pm2.json
    
  5. 使用Docker打包部署项目

    1. 创建Dockerfile文件,并添加以下内容:
    FROM node:18-alpine
    
    WORKDIR /app
    
    COPY package*.json ./
    
    RUN npm install
    
    COPY . .
    
    CMD ["npm", "start"]
    
    1. 使用以下命令构建Docker镜像:
    docker build -t my-project .
    
    1. 使用以下命令运行Docker容器:
    docker run -p 3000:3000 my-project
    

    现在,您的