Nest.js

简单学习Nest 6 第四篇

2020-02-16  本文已影响0人  爱写Bug的程序猿

第四篇 控制器与服务

controller在nest应用中扮演的是路由分配的功能,并且通过调用service来实现对数据库的增删改查功能。而服务是通过依赖注入的方式注入的控制器的属性中。

项目目录

src
│ app.module.ts
│ main.ts

├─auth
│ auth.controller.ts
│ auth.module.ts
│ auth.service.ts

├─dbs
│ dbs.module.ts
│ dbs.service.ts

└─user
user.controller.ts
user.module.ts
user.service.ts

分析项目的目录我们知道了该项目中有User与Auth两个业务模块,一个数据库模块Dbs,和一个根模块App

我们将在auth.service中实现登录认证的功能,然后在依赖到auth.controller模块中,这样我们就可以实现用户登录的功能。

代码解析

// src/auth/auth.controller.ts
import { AuthService } from './auth.service';
import { Controller, Post, Body } from '@nestjs/common';

interface LoginDto {
  username: string;
  password: string;
}

@Controller('auth') // 这里的 auth 表示的路由 /atuh
export class AuthController {
  @Inject() private authService: AuthService;
   // 将AuthService注入到authService,属性中
   // 其实不用太在意注入到底是什么,这里你可以理解为AuthController留了个口叫authService,然后nest
   // 在内部自动将new AuthService()然后填到authService里

  @Post('login') // Post /atuh/login 可以测试api
  login (@Body() dto: LoginDto) {
    return this.authService.login(dto.username, dto.password);
  }

}

import { Injectable, NotFoundException } from '@nestjs/common';
import { DbsService } from 'src/dbs/dbs.service';

@Injectable()
export class AuthService {
  // @Inject() private dbs: DbsService;
  constructor(private dbs: DbsService) { }
  // 两种注入方式,效果一样

  login (username: string, password: string) {
    const user = this.dbs.findOneByLogin(username, password);
    if (user.length === 0) {
      throw new NotFoundException('账号或密码错误');
    }
    return user;
  }
}

测试

密码错误 密码正确

看着感觉很麻烦吧,没办法企业级开发就是这样,因为只有这样才能将业务与数据分离,为了以后更好的维护扩展,今天就到这里吧,明天为了让代码变得更加有维护性和拓展性,明天开始学习一个神奇的东西Guard,并且对自己写的Guard用修饰器进行封装。

该项目的所有代码我已经发布到Git上了,地址:https://github.com/holleworldabc/nest-helloworld

最后关注点赞收藏,每天都会更新新的文章。

ByBy咱们明天见。

咱们明天见。

本站作品的版权皆为作品作者所有。

本站文字和内容为本站编辑或翻译,部分内容属本站原创,所以转载前务必通知本站并以超链接形式注明内容来自本站,否则以免带来不必要的麻烦。

本站内容欢迎分享,但拒绝有商业目的的转载!

上一篇下一篇

猜你喜欢

热点阅读