我正在尝试使用 制作一个简单的应用程序nestjs。
当我添加时CreateUserDTO,UserService我收到以下 TS 错误。
src/user/user.service.ts:11:40 - 错误 TS2345:“CreateUserDTO”类型的参数不可分配给“User”类型的参数。类型“CreateUserDTO”缺少类型“User”中的以下属性:$add、$set、$get、$count 以及其他 32 个属性。11 返回await this.userModel.create(userData);
我查了很多关于DTO的代码,但不知道原因。
这是代码。
import { Column, Model, PrimaryKey, Table } from 'sequelize-typescript';
@Table
export class User extends Model<User> {
@PrimaryKey
@Column
userId: string;
@Column
name: string;
}
Run Code Online (Sandbox Code Playgroud)
export class CreateUserDTO {
userId: string;
name: string;
}
Run Code Online (Sandbox Code Playgroud)
@Injectable()
export class UserService {
constructor(@InjectModel(User) private userModel: typeof User) {}
async createUser(userData: CreateUserDTO) {
const user = await this.userModel.create<User>(userData);
}
}
Run Code Online (Sandbox Code Playgroud)
问题来自于extends Model<User>你的构造函数,你不需要扩展 User 方法或注入 DTO。
DTO 非常简单且易于使用,您只需定义一个类并将其用作值类型,导入它而不是注入它
这是使用 DTO 创建用户的示例
create-user.dto.ts
export class CreateUserDto {
firstName: string;
lastName: string;
email: string;
password: string;
}
Run Code Online (Sandbox Code Playgroud)
这是控制器,您可以在其中使用 DTO 作为类型
users.controller.ts
import { CreateUserDto } from './dto/create-user.dto';
export class UsersController {
constructor(private readonly usersService: UsersService) {}
public async createUser(@Body() user: CreateUserDto) {
await this.usersService.register(user);
}
}
Run Code Online (Sandbox Code Playgroud)
之后,您只需使用存储库保存对象
users.service.ts
import { Injectable } from '@nestjs/common';
import { UsersEntity } from './users.entity';
import { CreateUserDto } from './dto/create-user.dto';
import { UsersRepository } from './users.repository';
@Injectable()
export class UsersService {
constructor(private readonly usersRepository: UsersRepository) {}
public async register(user: CreateUserDto): Promise<UsersEntity> {
return this.usersRepository.save({ ...user });
}
}
Run Code Online (Sandbox Code Playgroud)
如果您有更多疑问,请阅读有关NestJS 上请求负载的文档
| 归档时间: |
|
| 查看次数: |
23545 次 |
| 最近记录: |