首页 > 解决方案 > Nestjs sending data before complete execution from service to Controller

问题描述

I have a controller and service. From service, I am sending login success data to the controller. but its sending data before complete execution in service. but i am trying to send data after complete execution in loginservice.

I need to return user data after complete Login function..

userService

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;
      });
  }
}

userController

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;
  }
}

标签: nestjs

解决方案


因为您提供回调函数(最后一个参数),bcrypt.compare所以它不会返回承诺。请阅读文档:https ://www.npmjs.com/package/bcrypt#with-promises


推荐阅读