【问题标题】:How to use DTO in services file of nestjs app如何在 Nestjs 应用程序的服务文件中使用 DTO
【发布时间】:2020-04-17 01:26:45
【问题描述】:

我想根据用户名和密码值从 mongodb 获取特定人的数据,但我得到了 db 的所有数据,而不是我传入用户名和密码的特定人。

这是DTO的代码:

import {IsString, IsInt,IsEmail,IsNotEmpty, IsNumberString} from 'class-validator';

export class LoginDto {
    @IsEmail()
    username: string;

    @IsNumberString()
    password: string;
}

这是服务的代码:

async loginsys(credentials: LoginDto): Promise<any> {
    const cred = await this.student.find({ credentials }).exec();
    return cred;
}

这是控制器的代码:

@Post('login')
log(@Body('credentials') credentials: LoginDto): any {
    return this.crudservice.loginsys(credentials);
}

【问题讨论】:

  • 你能举一个数据库结果的例子和你的预期结果吗?

标签: node.js mongodb typescript nestjs typeorm


【解决方案1】:

如果你想得到一个实体,你可以使用findOne而不是find

return this.student.findOne(credentials)

如果您将查询传递给wherefind 应该可以工作:

find({where: credentials})`

exec() 不是必需的。

【讨论】:

  • 仍然无法正常工作,我将所有条目作为输出。但我只想要根据我的用户名和密码的特定数据
  • 这很奇怪,findOne 只返回一个实体。您的架构/模型是什么样的?
  • findOne 只返回集合的第一个值
  • 您必须改用findOne(credentials),请参阅我的编辑。问题是您实际上是在查询字段credentials,因为{credentials}{credentials: credentials} 的简写
猜你喜欢
  • 2020-01-09
  • 2020-07-24
  • 2021-12-05
  • 2021-06-26
  • 2019-09-20
  • 2022-11-02
  • 2021-02-24
  • 2020-05-05
  • 1970-01-01
相关资源
最近更新 更多