Как добавить файл исходного кода DTO в файл служб в приложении nest js - PullRequest
1 голос
/ 11 апреля 2020

У меня есть два файла, один - DTO, где я объявляю валидацию методов, а другой файл - код сервисов, где я пишу код API. Но я не знаю, как внедрить класс файла DTO в сервисный конструктор (). Вот код моего DTO и сервисов соответственно.

код сервиса:

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { studentdto} from './student.dto';

@Injectable()
export class CrudService {
  constructor(
    @InjectModel('student') private readonly studentmodel:studentmodel<studentdto>
  ) { Object.assign(this, studentmodel)}
 async insert(name,rollno,section){
      const add_stu=new this.studentmodel({studentdto})
      return await add_stu.save()
 }
}

Вот код файла DTO:

import {IsString, IsInt} from 'class-validator'
import { Document } from 'mongoose';
export class studentdto{
    @IsString()
    name:string

    @IsInt()
    rollno:number

    @IsString()
section:string
}

1 Ответ

0 голосов
/ 11 апреля 2020

Обновление

С понедельником goose вы можете сделать это следующим образом:

student.interface. ts

export interface Student {
  name: string;
  rollno: number;
  section: string;
};

student.schema.ts

import { Schema } from 'mongoose'; 

export const StudentSchema = new mongoose.Schema({
  name: String,
  rollno: Number,
  section: String,
});

crudService. service.ts

import { Injectable, Inject } from '@nestjs/common';
import { Model } from 'mongoose';
import { studentdto} from './student.dto';
import { Student } from './student.interface.ts';
import { StudentSchema } from './student.schema.ts';


@Injectable()
export class CrudService {
  constructor(
    @Inject('STUDENT_MODEL') 
    private studentModel: Model<StudentSchema>
  ) {}

 async insert(studentDto: studentdto): Promise<Student> {
      const createdUser = new this.studentModel(studentDto);
      return createdUser.save()
 }
}

Более подробную информацию вы можете найти здесь .


Вы можете использовать DTO в контроллере.

Student.controller.ts

import { 
    Controller, Post, Body
} from "@nestjs/common";
import { CrudService } from './crud.service.ts';
import { studentdto} from './student.dto';

@Controller("student")
export class StudentController {
    constructor(
        private readonly crudService: CrudService
    ) {
        @Post("addStudent")
        addStudent(
            @Body() newStudent: studentdto
        ): studentdto {
            return this.crudService.insert(newStudent);
        }
    }
}

При отправке запроса на /student/addStudent Nest JS создайте экземпляр studentdto.

...