NestJS 和 Prisma,当我们可以使用 Prisma 生成类型时,我们真的需要 DTO 进行验证吗?

问题描述 投票:0回答:1

我正在使用 Prisma ORM 构建一个 NestJS 项目,经过一些教程并检查该主题后,我没有看到(或似乎理解)这里使用 DTO,而我们可以使用 Prisma 生成类型

这似乎是我们在 Prisma 架构中所做的重复,并且可能会导致稍后更新错误,因为我们必须同时更新架构和 DTO

经过一番搜索后,我找到了直接使用 Prisma 生成类型(如 UserCreateInput / UserGetPayload)的解决方案

这是我所做的代码:

用户.interface.ts

import { type Prisma } from "@prisma-postgresql";

// select for query filtering
export const UsersSelect = {
    name: true,
    email: true,
} satisfies Prisma.UsersSelect;
// UsersGetPayload is autogenerated by prisma after migration
export type Users = Prisma.UsersGetPayload<{ select: typeof UsersSelect }>;

用户.service.ts

import { Injectable } from "@nestjs/common";

// prisma import
import { PrismaPostgresqlService } from "../../prisma/services/prisma-postgresql.service";
import { Users, UsersSelect } from "../interfaces/user.interface";

@Injectable()
export class UserService {
    private prismaSQL;

    constructor(prismaSQL: PrismaPostgresqlService) {
        this.prismaSQL = prismaSQL;
    }

    async findAll(): Promise<Users[]> {
        return await this.prismaSQL.users.findMany({
            select: UsersSelect,
        });
    }
}

有了这个,我可以直接从 prisma 获得自己的类型

我不知道这是否确实是一个好的解决方案,也许我在这里错过了 DTO 的要点?

为什么在我的案例中仍然使用 DTO 是个好主意?或者这是一个好的解决方案吗?

typescript nestjs prisma dto class-validator
1个回答
0
投票

瓦伦丁,
恕我直言,DTO 并不总是需要的。这取决于您如何组织您的应用程序。如果您不想将代码与正在使用的框架解耦,那么使用自动生成的类型听起来不错。正如您所说,它可能带来比您需要的更多的复杂性。我建议,从这种方式开始,随着应用程序的发展,它将显示是否有必要创建 DTO。

© www.soinside.com 2019 - 2024. All rights reserved.