NestJS

文章的地址

NestJShttps://equinox-primrose-ceb.notion.site/NestJS-22d4b8031e0f80b39fc7fe1ff111f802

不产生测试的.spec.ts文件的配置

复制代码
"generateOptions": {
		"spec": false
}

创建模型 nest g m xx

创建服务 nest g s xx

创建处理 nest g c xx

CRUD请求整体流程

app.module.ts:全局注入入口

复制代码
import { UserModule } from './user/user.module';
import { Profile } from './profile/profile.entity';

@Module({ 
  imports: [
    ArticleModule,
    UserModule,
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'nestjs_test',
      entities: [Article, Content, Label, User, Profile],
      synchronize: true,
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

上面代码配置了数据库还有entities、controller

数据库连接需要用到的包:"@nestjs/typeorm": "^11.0.0","mysql2": "^3.14.1",等等

user为例子

JWT

复制代码
import { Injectable, CanActivate, ExecutionContext, UnauthorizedException } from '@nestjs/common';
import * as jwt from 'jsonwebtoken';

const JWT_SECRET = 'wttoken_yxy';// 建议放到 .env
const IS_DEV_MODE = true; // 开发环境标志

@Injectable()
export class JwtAuthGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const request = context.switchToHttp().getRequest();
    const auth = request.headers['authorization'];
    if (!auth || !auth.startsWith('Bearer ')) {
      throw new UnauthorizedException('未登录或token无效');
    }
    const token = auth.replace('Bearer ', '');
    try {
      // 尝试验证token
      const payload = jwt.verify(token, JWT_SECRET);
      request.user = payload;
      return true;
    } catch (error) {
      // 开发环境下,如果token验证失败,使用固定的测试用户信息
      if (IS_DEV_MODE) {
        console.warn('开发环境: JWT验证失败,使用测试用户身份');
        request.user = { 
          userId: 1, 
          username: 'testuser' 
        };
        return true;
      }
      throw new UnauthorizedException('token无效或已过期');
    }
  }
} 

请求所有用户(查询)

controller

需要标记这是controller层

还需要注入service层,操作service层来操作model进行数据库的CRUD

注入service

复制代码
**constructor(private readonly userService: UserService) {}**

service

导入模型

复制代码
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './user.entity';
import { CreateUserDto } from '../dto/create-user.dto';
import { LoginUserDto } from '../dto/login-user.dto';
import { UpdatePasswordDto, UpdateNicknameDto, UpdateRegisterCodeDto } from '../dto/update-user.dto';

user.entity.ts

复制代码
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';

@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column({ unique: true })
  username: string;

  @Column()
  password: string;

  @Column({ nullable: true, default: '' })
  nickname: string;

  @CreateDateColumn()
  createTime: Date;

  @UpdateDateColumn()
  updateTime: Date;
} 

id是数字主键自增 username字符串唯一 nickname字符串不能为空默认' ' createTime日期格式

@CreateDateColumn() 创建日期格式 @UpdateDateColumn() 修改日期格式

接上面查询所有用户

复制代码
async findAll() {
    // 不返回密码字段,但返回昵称字段
    const users = await this.userRepository.find();
    return users.map(user => {
      const { password, ...result } = user;
      return result;
    });
  }

这段代码的含义是:查询所有的用户信息,

复制代码
/**
   * 查询所有用户信息,但不返回密码字段,保留昵称等其他字段
   * 1. 从数据库查出所有用户
   * 2. 遍历每个用户对象,去掉 password 字段
   * 3. 返回处理后的用户列表
   */

Module

复制代码
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './user.entity';
import { Profile } from '../profile/profile.entity';
import { UserService } from './user.service';
import { ProfileService } from '../profile/profile.service';
import { UserController } from './user.controller';
import { ProfileController } from '../profile/profile.controller';

@Module({
  imports: [TypeOrmModule.forFeature([User, Profile])],
  providers: [UserService, ProfileService],
  controllers: [UserController, ProfileController],
  exports: [UserService, ProfileService],
})
export class UserModule {} 
相关推荐
万岳科技系统开发4 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
冉冰学姐17 分钟前
SSM智慧社区管理系统jby69(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·管理系统·智慧社区·ssm 框架
杨超越luckly24 分钟前
HTML应用指南:利用GET请求获取中国500强企业名单,揭秘企业增长、分化与转型的新常态
前端·数据库·html·可视化·中国500强
Elastic 中国社区官方博客32 分钟前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.36 分钟前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐40 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_999943 分钟前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学1 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.1 小时前
Mysql
数据库·mysql
全栈前端老曹2 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集