【发布时间】: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