Str*_*ch0 1 javascript node.js nestjs
我正在尝试使用 DTO 为 Nest.js 中的控制器定义我的数据。
我正在学习教程
我已经在其中创建了我的 DTO src/controllers/cats/dto/create-cat.dto.js
export class CreateCatDto {
readonly name: string;
readonly age: number;
readonly breed: string;
}
Run Code Online (Sandbox Code Playgroud)
不过,我对如何将其导入应用程序感到困惑。文档实际上并没有说明它需要导入,所以我认为 nest 在幕后做了一些魔术?尽管我有一种感觉,但事实并非如此。
我想直接在我的控制器中导入它:
import { CreateCatDto } from './dto/create-cat.dto';
Run Code Online (Sandbox Code Playgroud)
但这会引发错误:
Unexpected token (2:11)
1 | export class CreateCatDto {
> 2 | readonly name: string;
| ^
3 | readonly age: number;
4 | readonly breed: string;
5 | }
Run Code Online (Sandbox Code Playgroud)
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 [];
}
}
Run Code Online (Sandbox Code Playgroud)
是否需要导入 DTO 类,然后使用 bind 到我的 create 函数,例如Res()和Body()或 nest 在幕后做了一些魔术,因为他们从未声明要在那里的文档中导入它?
谢谢。
快速回答:你不能在 JavaScript ES6 中使用 DTO
不长答案:这是文档的摘录,刚刚引入了 DTO。
首先,我们需要建立 DTO(数据传输对象)模式。DTO 是定义如何通过网络发送数据的对象。我们可以通过使用 TypeScript 接口或简单的类来做到这一点。
如您所见,它在那里用作提供静态类型的接口。你真的不能在 JS 中使用 DTO,因为接口和静态类型不是 ES6 标准的一部分。
你应该跳过 ES6 的 DTO 部分并使用这样的@Body()参数代替
@Post()
@Bind(Body())
async create(createCatDto) {
// TODO: Add some logic here
}
Run Code Online (Sandbox Code Playgroud)
我的建议:尝试考虑迁移到 Typescript 以充分利用 NestJS。
| 归档时间: |
|
| 查看次数: |
4077 次 |
| 最近记录: |