在Nest JS中导入dto类

时间:2018-02-21 11:17:39

标签: javascript node.js nestjs

enter image description here我正在尝试使用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;
}

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

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

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(),或者嵌套在场景后面做了一些魔术,因为他们从未声明在那里导入它?

感谢。

1 个答案:

答案 0 :(得分:3)

快速回答:您无法在JavaScript ES6中使用DTO

不那么长答案:以下是文档的摘录,只是介绍了DTO。

  

首先,我们需要建立DTO(数据传输对象)模式。一个   DTO是一个定义数据如何通过数据发送的对象   网络。我们可以通过使用TypeScript接口或简单地完成此操作   类。

如您所见,它在界面用于提供静态输入。你真的不能在JS中使用DTO,因为接口静态类型不是ES6标准的一部分。

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

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

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