分销商城搭建关键词优化公司排行
上一篇我们已经安装好了nestjs,可以在浏览器看到hello,world的结果。接着我们就要熟悉一下如何使用nestjs开发后台API了。本篇介绍如何用提示词一步步的搭建。
1 安装依赖
打开我们的trae,在对话框里输入如下提示词
帮我安装 bcrypt 以及 jwt 认证相关依赖
2 创建用户模块
使用如下命令创建一个用户模块
npx --yes @nestjs/cli g module users
命令执行完毕后,可以在大纲树里看到多了一个users文件夹,里边多了一个users.model.ts
3 创建DTO对象
输入如下提示词,让ai帮我们生成文件
生成两个 DTO 用于用户注册和登录。分别为 RegisterDto 和 LoginDto,包含必要的字段
生成的代码有报错,鼠标移动到出错的位置上,点击AI修复,让AI自动修复。这里AI给出的建议是安装必要的依赖
npm install class-validator --save
在终端安装好依赖我们的代码就不报错了
login.dto.ts
import { IsNotEmpty, IsString, MinLength } from 'class-validator';export class LoginDto {@IsNotEmpty({ message: '用户名不能为空' })@IsString({ message: '用户名必须是字符串' })username: string;@IsNotEmpty({ message: '密码不能为空' })@IsString({ message: '密码必须是字符串' })@MinLength(6, { message: '密码长度不能少于6个字符' })password: string;
}
register.dto.ts
import { IsEmail, IsNotEmpty, IsString, MinLength } from 'class-validator';export class RegisterDto {@IsNotEmpty({ message: '用户名不能为空' })@IsString({ message: '用户名必须是字符串' })username: string;@IsNotEmpty({ message: '邮箱不能为空' })@IsEmail({}, { message: '请输入有效的邮箱地址' })email: string;@IsNotEmpty({ message: '密码不能为空' })@IsString({ message: '密码必须是字符串' })@MinLength(6, { message: '密码长度不能少于6个字符' })password: string;
}
4 创建用户实体(User Entity)与服务
我们目前不集成数据库,使用数组来存储用户的数据
4.1 创建实体
输入如下提示词
帮我创建一个用户的实体
文件生成后依然是有报错的,上边已经有了方案,我们需要把自动生成的代码依赖的包安装一下
npm install typeorm --save
npm install @nestjs/typeorm --save
4.2 创建 UsersService
在终端里输入如下命令创建UsersService
npx --yes @nestjs/cli g service users
业务逻辑我们也使用提示词进行生成,输入如下提示词
users.service.ts 完善一下这个类,实现一下用户的注册、登录功能,包含必要的校验逻辑,使用数组存储数据
这里要说明的是,因为文件已经创建了,我们可以使用引用的模式告诉大模型我要写入哪个文件
users.service.ts
import { Injectable, ConflictException, UnauthorizedException } from '@nestjs/common';
import * as bcrypt from 'bcrypt';
import { User } from './entities/user.entity';
import { RegisterDto } from './dto/register.dto';
import { LoginDto } from './dto/login.dto';@Injectable()
export class UsersService {private users: User[] = [];async register(registerDto: RegisterDto): Promise<User> {const { username, email, password } = registerDto;// 检查用户名是否已存在const existingUsername = this.users.find(user => user.username === username);if (existingUsername) {throw new ConflictException('用户名已存在');}// 检查邮箱是否已存在const existingEmail = this.users.find(user => user.email === email);if (existingEmail) {throw new ConflictException('邮箱已被注册');}// 创建新用户const user = new User();user.username = username;user.email = email;user.password = await bcrypt.hash(password, 10);this.users.push(user);return user;}async login(loginDto: LoginDto): Promise<User> {const { username, password } = loginDto;// 查找用户const user = this.users.find(user => user.username === username);if (!user) {throw new UnauthorizedException('用户名或密码错误');}// 验证密码const isPasswordValid = await bcrypt.compare(password, user.password);if (!isPasswordValid) {throw new UnauthorizedException('用户名或密码错误');}return user;}
}
5 创建认证服务(AuthService)
接下来,我们创建一个用于处理登录、生成 JWT 的认证服务。我们创建一个新的模块auth模块来搭建对应的服务,在终端输入如下命令来创建模块
npx --yes @nestjs/cli g module auth
然后再创建相应的service
npx --yes @nestjs/cli g service auth
然后让大模型帮你完善一下service的逻辑
auth.module.ts
import { Module } from '@nestjs/common';
import { JwtModule } from '@nestjs/jwt';
import { AuthService } from './auth.service';
import { UsersModule } from '../users/users.module';
import { jwtConstants } from './constants';@Module({imports: [UsersModule,JwtModule.register({secret: jwtConstants.secret,signOptions: { expiresIn: jwtConstants.expiresIn },}),],providers: [AuthService],exports: [AuthService],
})
export class AuthModule {}
auth.service.ts
import { Injectable, UnauthorizedException } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { UsersService } from '../users/users.service';
import { LoginDto } from '../users/dto/login.dto';@Injectable()
export class AuthService {constructor(private usersService: UsersService,private jwtService: JwtService,) {}async login(loginDto: LoginDto) {const user = await this.usersService.login(loginDto);const payload = { username: user.username, sub: user.id };return {access_token: this.jwtService.sign(payload),};}
}
constants.ts
export const jwtConstants = {secret: 'your-secret-key', // 在生产环境中应该使用环境变量expiresIn: '1h', // token过期时间
};
6 创建 Auth 控制器(AuthController)
在终端输入如下命令,来创建controller
npx --yes @nestjs/cli g controller auth
创建好之后要求大模型完善逻辑,限定dto使用现有的不要新建
完善一下代码,dto用我已经创建好的register和login不要新建
7 将模块集成到应用中
确保在主模块(通常为 app.module.ts)中引入了 AuthModule,这样认证相关的路由才能生效。输入如下提示词
在主模块中引入auth模块
8 测试接口
让大模型来帮我们生成测试脚本,输入如下提示词
帮我写个简易的测试脚本,用于测试 /auth/register 和 /auth/login 接口
他会自动创建脚本
脚本创建好之后可以输入如下命令来执行自动测试
npm run test:e2e