【问题标题】:Importing dto class in Nest JS在 Nest JS 中导入 dto 类
【发布时间】:2023-03-25 22:10:01
【问题描述】:

我正在尝试使用 DTO 在 Nest.js 中为我的控制器定义我的数据。

我在关注tutorial

我在 src/controllers/cats/dto/create-cat.dto.js 中创建了我的 DTO

export class CreateCatDto {
  readonly name: string;
  readonly age: number;
  readonly breed: string;
}

我对如何将其导入应用程序感到困惑。文档实际上并没有说明它需要导入,所以我认为 Nest 在幕后做了一些魔术?虽然我有一种感觉,但事实并非如此。

我正在尝试直接在我的控制器中导入它:

import { CreateCatDto } from './dto/create-cat.dto';

但这会引发错误:

Unexpected token (2:11)
  1 | export class CreateCatDto {
> 2 |   readonly name: string;
    |            ^
  3 |   readonly age: number;
  4 |   readonly breed: string;
  5 | }

DTO 代码是直接从嵌套文档中删除的,因此代码不应该有任何问题(尽管 readonly name: string; 看起来不像我以前遇到过的 javascript)。

作为参考,这是我尝试使用 DTO 的猫控制器的其余部分

import { Controller, Bind, Get, Post, Body, Res, HttpStatus } from '@nestjs/common';
// import { CreateCatDto } from './dto/create-cat.dto';

@Controller('cats')
export class CatsController {

  @Post()
    @Bind(Res(), Body())
    async create(res, body, createCatDto) {
        console.log("createCatDto", createCatDto)
        res.status(HttpStatus.CREATED).send();
    }

  @Get()
  findAll() {
    return [];
  }
}

是否需要导入 DTO 类,然后使用绑定到我的创建函数,例如 Res()Body(),或者嵌套在幕后发挥了一些作用,因为他们从未声明要在文档中导入它?

谢谢。

【问题讨论】:

  • 这不是 javascript,它是 TypeScript。您创建了 JS 文件 - src/controllers/cats/dto/create-cat.dto.js
  • 这令人困惑,因为在他们的文档中,他们明确建议使用 es6 而不是打字稿,正如您在我添加的屏幕截图中看到的那样,可以在 docs.nestjs.com/controllers 标题下找到 POST handler
  • 很酷的事实是所有文档都有 typescript/javascript 代码示例,所以他们给出了两个示例。
  • @MatheusSilva 不是全部,JS在某些情况下包含TS
  • 我知道这一点,但在这个特定的示例中,代码 sn-p 与 fort JS 和 TS 完全相同。正如屏幕截图所述:“我们建议在此处使用类”所以我假设它们都是 JS sn-ps...

标签: javascript node.js nestjs


【解决方案1】:

快速回答:你不能在 JavaScript ES6 中使用 DTO

答案不长:这是文档的摘录,刚刚介绍了 DTO。

首先,我们需要建立 DTO(数据传输对象)架构。一个 DTO 是一个对象,它定义了数据将如何通过 网络。我们可以通过使用 TypeScript 接口或简单地做到这一点 类。

如您所见,它在那里被用作接口以提供静态类型。你真的不能在 JS 中使用 DTO,因为 interfaceStatic typing 不是 ES6 标准的一部分。

您应该跳过 ES6 的 DTO 部分,并使用像这样的 @Body() 参数

@Post()
@Bind(Body())
async create(createCatDto) {
    // TODO: Add some logic here
}

我的建议:尝试考虑迁移到 Typescript 以充分利用 NestJS。

【讨论】:

    猜你喜欢
    • 2020-07-30
    • 2021-02-10
    • 2021-05-05
    • 2017-11-13
    • 1970-01-01
    • 2020-07-24
    • 2022-10-14
    • 2020-11-25
    • 2021-06-07
    相关资源
    最近更新 更多