[DOCKER] Connectez le projet nestjs créé avec Nx à mysql

Ceci est une continuation de this

Connectez le projet nestjs créé avec Nx à mysql

Table of Contents

  1. Création facile de mysql avec docker
  2. Connectez-vous à une base de données telle que MySql
  3. Connectez-vous à la base de données MySql (connectez l'application à l'aide de typeorm)

1. Créez facilement mysql avec docker

La structure de répertoires actuelle prend le format suivant.

$ tree -L 1 -I node_modules
├── README.md
├── apps
│   └── nestjs-sample
│       ├── jest.config.js
│       ├── src
│       │   ├── app
│       │   │   ├── app.controller.spec.ts
│       │   │   ├── app.controller.ts
│       │   │   ├── app.module.ts
│       │   │   ├── app.service.spec.ts
│       │   │   ├── app.service.ts
│       │   │   └── todo
│       │   ├── assets
│       │   ├── environments
│       │   │   ├── environment.prod.ts
│       │   │   └── environment.ts
│       │   └── main.ts
│       ├── tsconfig.app.json
│       ├── tsconfig.json
│       └── tsconfig.spec.json
├── jest.config.js
├── libs
├── nx.json
├── package.json
├── tmp
│   └── apps
│       └── nestjs-sample
│           └── tsconfig.generated.json
├── tools
│   ├── schematics
│   └── tsconfig.tools.json
├── tsconfig.base.json
├── workspace.json
└── yarn.lock

Ensuite, créez simplement un fichier docker avec une image de mysql.

$ touch docker-compose.yml
$ touch Dockerfile

Décrivez le contenu de docker-compose.

docker-compose.yml


version: '3.8'
services:
  db:
    container_name: nestjs-sample-db
    image: mysql:5.7
    tty: true
    restart: always
    environment:
      MYSQL_DATABASE: nestjs-sample-db
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: nestjs-sample-db
      MYSQL_PASSWORD: password
    ports:
      - '3306:3306'

Le contenu de Docker est le suivant.

FROM mysql:5.7

Démarrez docker.

$ docker-compose up

2. Connectez-vous à la base de données MySql (connectez l'application à l'aide de typeorm)

Puisque ce chapitre sera implémenté, je pense que c'est mieux pour ceux qui veulent le traiter dans Documents officiels.

Les choses à faire sont les mêmes

  1. Installation de TypeORM
  2. Activez le type ORM

Sera réalisée.

2-1. Type d'installation ORM

Installez le module de dépendance.

$ yarn add @nestjs/typeorm typeorm mysql

2-2. Activation du type ORM

Modifiez app.module.ts_ pour activer TypeORM.

Le fichier app.module.ts actuel est le suivant.

app.module.ts


import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Ajoutez les paramètres TypeOrm ici.

app.module.ts


import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; ##Ajouter ici
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
  ##Ajout d'ici
    TypeOrmModule.forRoot({
      type: "mysql",
      host: "localhost",
      port: 3306,
      username: "nestjs-sample-db",
      password: "password",
      database: "nestjs-sample-db",
      entities: ["dist/**/*.entity{.ts,.js}"],
      "synchronize": true
    }),,
  ##Ajouté jusqu'à ici
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Si vous utilisez le document officiel, c'est la fin, mais comme il ne lit pas les paramètres d'entité, changez-le en TypeormModule.forRoot comme suit.

app.module.ts


import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: "mysql",
      host: "localhost",
      port: 3306,
      username: "nestjs-sample-db",
      password: "password",
      database: "nestjs-sample-db",
      entities: [], ##Changer ici
      autoLoadEntities: true,
      synchronize: true ##Changer ici
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

"@ nrwl / workspace": S'il s'agit de "10.3.1", il sera décrit un jour car la connexion et la relation avec la base de données ne fonctionneront pas uniquement avec ce paramètre (des problèmes ont été soulevés à partir du 11/7, mais ils ont été résolus. Cela ne fonctionne pas + la réécriture de tsconfig fonctionne, mais ...)

En gros, changez tsconfig.app.json et app.module.ts par ce qui suit.

tsconfig.app.json


{
  "extends": "./tsconfig.json",
  "compilerOptions": {
    "outDir": "../../dist/out-tsc",
    "types": ["node"],
    "emitDecoratorMetadata": true,
    "skipLibCheck": true,
    "module": "commonjs", // <-- here
    "target": "es2017", // <-- here
  },
  "exclude": ["**/*.spec.ts"],
  "include": ["**/*.ts"]
}

app.module.ts


import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { getMetadataArgsStorage } from 'typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: "mysql",
      host: "localhost",
      port: 3306,
      username: "nestjs-sample-db",
      password: "password",
      database: "nestjs-sample-db",
      entities: getMetadataArgsStorage().tables.map(t => t.name),
      synchronize: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Repo

Recommended Posts

Connectez le projet nestjs créé avec Nx à mysql
Connectez-vous à MySQL 8 avec Java
Créez des projets Spring Boot par environnement avec Gradle
Obtenez des données avec une API créée par la commande curl
Comment connecter MySQL / MariaDB + HikariCP avec Liferay 7 / DXP
J'ai démarré MySQL 5.7 avec docker-compose et j'ai essayé de me connecter