Nestjs在完成从服务到控制器的执行之前发送数据

Nestjs在完成从服务到控制器的执行之前发送数据,nestjs,Nestjs,我有一个控制器和服务。从服务中,我向控制器发送登录成功数据。但它在服务中完成执行之前发送数据。但我正在尝试在loginservice中完成执行后发送数据 我需要在完成登录功能后返回用户数据 用户服务 import { Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common'; import { InjectModel } from '@nestjs/mongoose'; import * as jwt

我有一个控制器和服务。从服务中,我向控制器发送登录成功数据。但它在服务中完成执行之前发送数据。但我正在尝试在loginservice中完成执行后发送数据

我需要在完成登录功能后返回用户数据

用户服务

import { Injectable, NotFoundException, UnauthorizedException } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import * as jwt from 'jsonwebtoken';


import { Model } from 'mongoose';

import { User } from './user.model';

import * as bcrypt from 'bcrypt'

@Injectable()
export class UserService {
  constructor(
    @InjectModel('User') private readonly userModel: Model<User>,
  ) { }

  async Login(email: string, password: string) {
    const user = await this.userModel.findOne({ email });
    if (!user) {
      console.log("User does exist on the database.");
      throw new UnauthorizedException();
    }

     await bcrypt.compare(password, user.password, function (err, result) {
        if (!result) {
          throw new UnauthorizedException();
        }
        const authJwtToken = jwt.sign({ name: user.name, email: user.email, role: user.role }, "testSecreate");
        const response = { name: user.name, email: user.email, role: user.role, token: authJwtToken }
        console.log(response)
        return response;
      });
  }
}

由于您向
bcrypt.compare提供回调函数(最后一个参数),因此它不会返回承诺。请阅读以下文件:

import {
  Controller,
  Post,
  Body,
  Get,
  Param,
  Patch,
  Delete,
} from '@nestjs/common';

import { UserService } from './user.service';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Post('/login')
  async login(
    @Body('email') userEmail,
    @Body('password') userPassword
  ) {
    const token = await this.userService.Login(userEmail, userPassword)
    console.log(token, 'token')
    return token;
  }
}