🥠BLOCKTRIPプロジェクト-4|DBバインド
blocktrip 4回目のタックル
本当に久しぶりに開発ログを書きました
元なら週に1回コードテストの練習問題を解いて、
ログ記録など多様なコンテンツの開発過程を行うべきだったが、個人的な状況(番外、圧力)のため、ようやく段階的に回復し、再開しなければならない.
データベース構成
まず、自分の設計に基づいて、ユーザーの作成と管理から始めます.
だからローカルのmysqlに接続したいので、今度はmysqlをドックに置いて管理します.
もっと軽くて便利ではないでしょうか.それを思いついて、mysql容器をdockerに置きました.
ドッキングステーションの設置中に作成しました.
私の場合、windowsdackerデスクトップをダウンロードして使用しました.
WSL 2が必要
|mysql画像をダウンロードします.
docker pull mysql
|コンテナを作成して実行します.docker run --name mysql -e MYSQL_ROOT_PASSWORD=<password> -d -p 3306:3306 mysql:latest
|MySQL Docker接続docker exec -it mysql-container bash
接続する前に、bashに接続するにはdocker desktopでコンテナを実行する必要があります.次にパスワードを入力してログインすると、以下のようにShow DATABASESを使用してデータベースを表示できます.
ここまで、docker mysql構成を簡単に簡略化しました.
次に、実際の接続があるかどうかを見てみましょう.
nestJSとmysqlの連動
nestJS - Database
公式ドキュメントを参照するとすぐに接続できますが、データベース情報を隠す必要があります.
Databaseは単独で分離してnestJSのモードで働きたいと思っています.
npm install --save @nestjs/typeorm typeorm mysql2
まず,typeormを用いてクエリーを行うために,上記のパッケージをインストールした.npm install --save @nestjs/config joi
次に、環境変数を設定するconfigと、環境変数をチェックするjoiパッケージを選択してインストールします.// app.module.ts
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm';
import { UserModule } from './user/user.module';
import { DataBaseService } from './database/database.service';
import { DatabaseModule } from './database/database.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { AuthModule } from './auth/auth.module';
import * as Joi from 'joi';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
validationSchema: Joi.object({
DATABASE_PORT: Joi.number().required(),
DATABASE_USER: Joi.string().required(),
DATABASE_PASSWORD: Joi.string().required(),
DATABASE_NAME: Joi.string().required(),
JWT_SECRET_KEY: Joi.string().required(),
}),
}),
TypeOrmModule.forRoot(
new DataBaseService(new ConfigService()).getTypeOrmConfig(),
),
UserModule,
DatabaseModule,
AuthModule,
],
controllers: [],
providers: [],
})
export class AppModule {
constructor(private connection: Connection) { }
}
既存のnodejsで使用されているdotnvではなく、nestjsが提供するConfigModuleを使用します.envが設定されています.
ConfigModule.forRoot({
isGlobal: true,
validationSchema: Joi.object({
DATABASE_PORT: Joi.number().required(),
DATABASE_USER: Joi.string().required(),
DATABASE_PASSWORD: Joi.string().required(),
DATABASE_NAME: Joi.string().required(),
JWT_SECRET_KEY: Joi.string().required(),
}),
ConfigModule.forRootを使用すると、環境変数をどこでも呼び出すことができます.isGlobalオプションはtrueで、グローバルに使用できます.
validationSchemaを使用して、先ほどインストールしたJoiを使用して環境変数を確認します.
データベースに接続するには、TypeOrmModuleを使用する必要があります.
TypeOrmModule.forRoot(
new DataBaseService(new ConfigService()).getTypeOrmConfig(),
)
new DataBaseServiceは私が作成したDataBaseに接続するためのサービスです.コードはこうです.// database/database.service.ts
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
@Injectable()
export class DataBaseService {
constructor(private readonly config: ConfigService) { }
public getTypeOrmConfig(): TypeOrmModuleOptions {
return {
type: 'mysql',
host: 'localhost',
port: +this.config.get('DATABASE_PORT'),
username: this.config.get('DATABASE_USER'),
password: this.config.get('DATABASE_PASSWORD'),
database: this.config.get('DATABASE_NAME'),
entities: ["dist/**/*.entity{.ts,.js}"],
synchronize: true,
autoLoadEntities: true,
};
}
}
私の場合、hostはlocalhostです.まだローカルで開発されているからです.prodは同期オプションを推奨しません.
表は簡単に作成できますが、本書ではprodで
私はあなたを放弃させます.
AutoLoadEntitiesを使用してエンティティを自動的にロードします.
私のエンティティはコンパイルされたdistフォルダにあるので、パスを上記に設定します.
残りの情報は、環境変数構成サービスとして使用されます.get()メソッドでインポートできます.
Env設定(通常はdev、prodに分けます).
// .env
DATABASE_PORT=3306
DATABASE_USER=USER
DATABASE_PASSWORD=PASSWORD
DATABASE_NAME=NAME
データベース・モジュールでは、プロバイダにサービスを追加することを忘れないでください.// database/database.module.ts
import { Module } from '@nestjs/common';
import { DataBaseService } from './database.service';
@Module({
providers: [DataBaseService],
})
export class DatabaseModule { }
docker mysqlは開いていて、設定も終わりました.npm runstartを試してみてください.正常なロードが完了しました.
最初は正常に動作しなかった場合、エラーが発生します.
実際には、dbツールを使用してデータまたはテーブルを検証できます.
ツールに接続情報を入力します.
コネクタテストに成功しました.
これで完成したらコネクタ成功!
ここまで、私のサーバーでdocker mysqlと連動しました!
幸いなことに、phpやexpressではなく、会社からバックエンドに移行しました.
他のフレームワークで働くのは初めてです.
NestJSはexpressとfastifyフレームワークを統合し、Java Springのモードに従います.
必要なものが用意されていて、コードをすばやく簡潔に分けることができて、いい感じです.
次に、ユーザーモジュールを作成し、ユーザーモジュールの作成とログインを試みます.
コア機能の開発が完了したら、削除または変更を更新する準備をします.
実は終わってから追加する資格はありません.远い道のり
いずれにしても、デザイン通りに続けていきたいと思います.
Reference
この問題について(🥠BLOCKTRIPプロジェクト-4|DBバインド), 我々は、より多くの情報をここで見つけました https://velog.io/@tjehdgur1500/BLOCKTRIP-프로젝트-4-DB-연동テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol