简单学习Nest 6 第四篇
第四篇 控制器与服务
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咱们明天见。
咱们明天见。
本站作品的版权皆为作品作者所有。
本站文字和内容为本站编辑或翻译,部分内容属本站原创,所以转载前务必通知本站并以超链接形式注明内容来自本站,否则以免带来不必要的麻烦。
本站内容欢迎分享,但拒绝有商业目的的转载!
发表评论 (审核通过后显示评论):