nestjs - 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;
}
}
解决方案
因为您提供回调函数(最后一个参数),bcrypt.compare
所以它不会返回承诺。请阅读文档:https ://www.npmjs.com/package/bcrypt#with-promises
推荐阅读
- typescript - 管道限制逆变函数
- asp.net - 如何发布字典列表
- spring - 使用 MockMvc 集成测试用户更新控制器
- python-3.x - Pandas Python中groupby时的列错误
- python - 有没有办法通过它的主要索引来分割一个列表?
- javascript - AngularJS 的继承控制器
- python - 将字母数字字符串屏蔽为类似格式
- windows - Windows systemprofile 目录根据用户显示不同
- python - Can't import scikit-learn: ImportError: DLL load failed: 找不到指定的程序
- python - 如何在 pycharm (windows 10) 上安装 numpy 1.18.1