NestJs服务搭建步骤记录(二):log4js、中间件使用示例

一、使用nestx-log4js/core增加日志打印(日志打印更容易分辨,会生成对应的日志文件,默认目录logs)

1.安装nestx-log4js/core

$ yarn add nestx-log4js/core

2.修改app.module.ts

// imports 加入 Log4jsModule
import { Log4jsModule } from "@nestx-log4js/core";
@Module({
  imports: [DbModule, UserModule, Log4jsModule.forRoot()],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3.修改main.ts

	// 使用Log4jsLogger
	app.useLogger(app.get(Log4jsLogger));
	const logger = new Logger("main.ts");
	logger.log(`这里是打印`);

效果:
在这里插入图片描述

二、nest中间件使用示例(注册密码加密入库)

# 添加加密库
$ yarn add crypto
# 创建hashPassword.middlewarets 中间件
$ nest g mi hashPassword

创建加密方法encryption.ts

import * as crypto from "crypto";
/**
 * @description: 加盐
 */
export function addSalt() {
  return crypto.randomBytes(3).toString("base64");
}
/**
 * @description: 密码加密
 * @param {string} userPassword
 * @param {string} salt
 * @return {*}
 */
export function encrypt(userPassword: string, salt: string): string {
  return crypto
    .pbkdf2Sync(userPassword, salt, 10000, 16, "sha256")
    .toString("base64");
}

hash-password.middleware.ts

import { Injectable, NestMiddleware } from "@nestjs/common";
import { NextFunction } from "express";
import { addSalt, encrypt } from "src/utils/encryption";

@Injectable()
export class HashPasswordMiddleware implements NestMiddleware {
  use(req: Request, res: Response, next: NextFunction) {
    let userPassword = req.body["password"];
    if (userPassword) {
      const salt = addSalt();
      userPassword = encrypt(userPassword, salt);
      req.body["password"] = userPassword;
      req.body["salt"] = salt;
    }
    next();
  }
}

user.moudle.ts 增加方法,指定路由使用中间件


export class UserModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(HashPasswordMiddleware).forRoutes("user/register");
  }
}

新增response.interface.ts

/**
 * @description: 返回体
 * @param {*}
 * @return {*}
 */
export interface IResponse {
  code: number; // 正常:1 失败: -1
  msg: string;
  data?: any;
}

修改user.service.ts

import { Injectable, Logger } from "@nestjs/common";
import { InjectModel } from "@nestjs/mongoose";
import { Log4jsLogger } from "@nestx-log4js/core";
import { Model } from "mongoose";
import { IResponse } from "src/interfaces/response.interface";
import { User } from "src/interfaces/user.interface";

const logger = new Logger("user.service");
@Injectable()
export class UserService {
  private response: IResponse;
  constructor(
    @InjectModel("USER_MODEL") private readonly userModel: Model<User>
  ) {}

  /**
   * @description: 通过用户名查找用户
   * @param {string} username
   * @return {*}
   */
  private async findOneByUsername(username: string) {
    return await this.userModel.findOne({
      username,
    });
  }
  /**
   * @description: 注册方法
   * @param {User} user
   * @return {*}
   */
  public async register(user: User) {
    try {
      let userInfo = await this.findOneByUsername(user.username);
      if (userInfo) {
        this.response = { code: -1, msg: "该用户已存在" };
        return;
      }
      const createUser = new this.userModel(user);
      await createUser.save();
      this.response = { code: 1, msg: "注册成功" };
    } catch (error) {
      this.response = { code: -1, msg: "注册失败" };
      logger.log(error);
    } finally {
      return this.response;
    }
  }
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值