[DOCKER] Verbinden Sie das mit Nx erstellte nestjs-Projekt mit mysql

Dies ist eine Fortsetzung von this

Verbinden Sie das mit Nx erstellte nestjs-Projekt mit mysql

Table of Contents

  1. Einfache Erstellung von MySQL mit Docker
  2. Stellen Sie eine Verbindung zu einer Datenbank wie MySQL her
  3. Stellen Sie eine Verbindung zur MySQL-Datenbank her (verbinden Sie die Anwendung mit typeorm).

1. Erstellen Sie einfach MySQL mit Docker

Die aktuelle Verzeichnisstruktur nimmt das folgende Format an.

$ 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

Als nächstes erstellen Sie einfach eine Docker-Datei mit einem Bild von MySQL.

$ touch docker-compose.yml
$ touch Dockerfile

Beschreiben Sie den Inhalt von 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'

Der Inhalt von Docker ist wie folgt.

FROM mysql:5.7

Starten Sie Docker.

$ docker-compose up

2. Stellen Sie eine Verbindung zur MySQL-Datenbank her (verbinden Sie die Anwendung mit typeorm).

Da dieses Kapitel implementiert wird, denke ich, dass dies besser für diejenigen ist, die sich in Offiziellen Dokumenten damit befassen möchten.

Die Dinge zu tun sind die gleichen

  1. TypeORM installieren
  2. Aktivieren Sie Typ ORM

Wird hinausgetragen werden.

2-1. Installieren Sie Typ ORM

Installieren Sie das Abhängigkeitsmodul.

$ yarn add @nestjs/typeorm typeorm mysql

2-2. Aktivieren von Typ ORM

Bearbeiten Sie app.module.ts_, um TypeORM zu aktivieren.

Die aktuelle app.module.ts lautet wie folgt.

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 {}

Fügen Sie hier die TypeOrm-Einstellungen hinzu.

app.module.ts


import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm'; ##Hier hinzufügen
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
  ##Ergänzung von hier
    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
    }),,
  ##Bis hierher addiert
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

Wenn Sie sich für das offizielle Dokument entscheiden, ist dies das Ende. Da die Entitätseinstellungen jedoch nicht gelesen werden, ändern Sie es wie folgt in TypeormModule.forRoot.

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: [], ##Hier ändern
      autoLoadEntities: true,
      synchronize: true ##Hier ändern
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

"@ nrwl / workspace": Wenn es sich um "10.3.1" handelt, wird es eines Tages beschrieben, da die Verbindung und die Datenbankbeziehung mit dieser Einstellung nicht alleine funktionieren. (Probleme wurden ab dem 07.11. angesprochen, aber behoben. Es funktioniert nicht + das Umschreiben von tsconfig funktioniert, aber ...)

Ändern Sie grob gesagt tsconfig.app.json und app.module.ts wie folgt.

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

Verbinden Sie das mit Nx erstellte nestjs-Projekt mit mysql
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Erstellen Sie mit Gradle Spring Boot-Projekte nach Umgebung
Holen Sie sich Daten mit der API, die mit dem Befehl curl erstellt wurde
So verbinden Sie MySQL / MariaDB + HikariCP mit Liferay 7 / DXP
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen