E-commerce Application(Nest js Microservice) - 3. Auth-Service(2)
6152 ワード
#1パッケージのインストール
npm i class-validator class-transformer
これらのパッケージは、検証用のパッケージです.たとえば、@IsStringというタグを使用して、要求された電子メールがString値であるかどうかを決定できます.#2 vo, dto, entity
nestjsではdtoに統一されていますが、voとdtoでそれぞれ実現します.
import { IsString } from 'class-validator';
export class RequestRegister {
@IsString()
@IsNotEmpty()
readonly email: string;
@IsString()
@IsNotEmpty()
readonly password: string;
@IsString()
@IsNotEmpty()
readonly nickname: string;
}
import { IsString } from 'class-validator';
export class RequestLogin {
@IsString()
@IsNotEmpty()
readonly email: string;
@IsString()
@IsNotEmpty()
readonly password: string;
}
import { IsString } from 'class-validator';
export class RequestUpdate {
@IsString()
@IsNotEmpty()
readonly nickname: string;
}
export class ResponseUser {
email: string;
nickname: string;
encryptedPwd: string;
userId: string;
}
import { IsNumber, IsString } from 'class-validator';
export class UserDto {
@IsNumber()
id: number;
@IsString()
email: string;
@IsString()
password: string;
@IsString()
nickname: string;
@IsString()
encryptedPwd: string;
@IsString()
userId: string;
}
import { Column, Entity, PrimaryGeneratedColumn } from "typeorm";
@Entity()
export class UserEntity {
@PrimaryGeneratedColumn()
id: number;
@Column()
email: string;
@Column()
nickname: string;
@Column()
userId: string;
@Column()
encryptedPwd: string;
}
これらのクラスはリクエストされたvoオブジェクトであり、read-only特性を有する.次に、IsStringという名前のレコーダを使用して、変数がstring値であるかどうかを決定します.しかし、ResponseUserというクラスは、応答に値を追加する必要があるためreadonlyインジケータを追加しないため、最終的にユーザが応答を受信することを可能にするサービス層から戻り値に伝達し続けるクラスである.また、dtoクラスはreadonly指示を使用していません.これは、レイヤデータを伝達し、ビジネスロジックを経たデータが変更される必要がある場合にデータを変更する必要があるためです.
entityクラスは、サービス層がリポジトリの保存方法を呼び出したときにデータベースに格納するオブジェクトです.
#2 service
uuidを使用してuserIdを作成するので、次のパッケージをインストールします.
npm i uuid
npm i -D @types/uuid
コントローラは、要求されたデータをdtoクラスに変換し、サービス層を呼び出して関連するビジネスロジックを取得する.例えば、現在実施されているスキームを見てみましょう.1)コントローラは、要求レジストラオブジェクトを受信し、そのオブジェクトを使用して、サービス層に送信するためにUserdtoというオブジェクトを作成する.
2)サービスはこのUserDtoを受信し、実際にデータベースに保存するためにUserEntityオブジェクトを作成します.
次に、UserEntityでUserDtoから値を取得し、その値をデータベースに格納します.その後、ResponseUserという名前のオブジェクトを作成し、コスト入力が完了したときにユーザーに表示する値を返します.
コードを見てみましょう.
@Post('register')
public async register(@Body() requestRegister: RequestRegister): Promise<ResponseUser> {
const userDto = new UserDto();
userDto.email = requestRegister.email;
userDto.password = requestRegister.password;
userDto.nickname = requestRegister.nickname;
return await this.userService.register(userDto);
}
public async register(userDto: UserDto) : Promise<ResponseUser> {
try {
const user = new UserEntity();
user.email = userDto.email;
user.encryptedPwd = userDto.password + "encrypted";
user.nickname = userDto.nickname;
user.userId = uuid();
await this.userRepository.save(user);
const responseUser = new ResponseUser();
responseUser.email = user.email;
responseUser.encryptedPwd = user.encryptedPwd;
responseUser.nickname = user.nickname;
responseUser.userId = user.userId;
return responseUser;
} catch(err) {
throw new HttpException(err, HttpStatus.BAD_REQUEST);
}
}
このように会員加入を行う#3 user.module.ts, main.ts
リポジトリを追加するにつれてuser.module.tsにインポートするコード.
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { UserEntity } from 'src/entity/user.entity';
import { UserController } from './user.controller';
import { UserService } from './user.service';
@Module({
imports: [TypeOrmModule.forFeature([UserEntity])],
controllers: [UserController],
providers: [UserService]
})
export class UserModule {}
class-validator、class-transformerパッケージを設定するときに追加するコード.import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
transform: true,
forbidNonWhitelisted: true,
transformOptions: {
enableImplicitConversion: true,
},
}),
);
await app.listen(7000); // on PORT 7000
}
bootstrap();
#4レジスタ結果値のチェック
私たちは合計2回会員登録を行い、データの格納は予想通りです.
次の記事では、login、認証、認証について説明します。
Reference
この問題について(E-commerce Application(Nest js Microservice) - 3. Auth-Service(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@biuea/E-commerce-ApplicationNest-js-Microservice-3.-Auth-Service2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol