欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Nest.js實(shí)現(xiàn)接口教程示例

 更新時(shí)間:2022年10月07日 10:17:57   作者:篝火旁  
這篇文章主要為大家介紹了使用Nest.js實(shí)現(xiàn)接口教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一.項(xiàng)目初始化

1.安裝腳手架

npm i -g @nestjs/cli

2.創(chuàng)建項(xiàng)目

nest new 項(xiàng)目名稱

3. cd 到項(xiàng)目

4.安裝依賴

npm i

5.啟動(dòng)項(xiàng)目,監(jiān)視文件,自動(dòng)重新編譯和重新加載服務(wù)器

npm run start:dev

6.查看啟動(dòng)項(xiàng)目啟動(dòng)端口號(hào),進(jìn)入程序入口文件 src/main.ts 查看

瀏覽器打開 http://localhost:3000/

二.核心文件介紹

app.controller.spec.ts 控制器的單元測(cè)試,也不知道怎么用的。

app.controller.ts 路由的基本控制器,就是操作邏輯的地方,處理請(qǐng)求響應(yīng)。

app.module.ts 應(yīng)用程序的根模塊。

app.service.ts 寫數(shù)據(jù)庫(kù)查詢語(yǔ)句的地方。

main.ts 應(yīng)用程序的入口文件,它使用核心函數(shù)NestFactory創(chuàng)建一個(gè) Nest 應(yīng)用程序?qū)嵗?/p>

三.創(chuàng)建一個(gè)接口模塊,處理請(qǐng)求

為了快速創(chuàng)建內(nèi)置驗(yàn)證的 CRUD 控制器,您可以使用 CLI 的CRUD 生成器nest g resource [name]。

這里根據(jù)官方文檔提示創(chuàng)建cats模塊

nest g resource cats

選擇 REST API風(fēng)格。

好了,現(xiàn)在src文件目錄下多了cats目錄,趕緊看看吧。

誒,我們是創(chuàng)建了cats模塊了,我們有使用嗎,有的,在哪里使用了呢?在應(yīng)用程序的根模塊里使用了啊,哦,原來使用nest g resource cats命令創(chuàng)建時(shí),同時(shí)使用了,真方便,ok快去看看吧。

四.看看cats模塊有啥吧

1.先看controller吧,請(qǐng)求方法都在這了

首先,映入眼簾的是頭部引入了很多很多......啥,不知道是啥。

接下去看吧,有一個(gè)@Controller('cats'),這是個(gè)裝飾器,里面有個(gè)參數(shù)喔,估計(jì)是路由前綴吧,接著看有幾個(gè)@開頭的 post、get、delete的東東,應(yīng)該是接口方法,嗯,是的,我們?nèi)ビ肁PIFox請(qǐng)求一下

我這個(gè)get請(qǐng)求返回了“This action returns all cats”,這不是我寫的啊,在哪里的,走,去看看。

@Get()
findAll() {
    return this.catsService.findAll();
}

大哥,我在controller找到這么個(gè)玩意,是個(gè)service方法耶,讓我按著我的Ctrl鍵點(diǎn)擊findAll進(jìn)去看看先。進(jìn)到了cats.service.ts文件,里面有一個(gè)findAll方法,返回了一串英文,我不懂英文喔,改改才行,我是個(gè)大帥b?。?!

2.你這地址有點(diǎn)單調(diào)啊,能不能接收query參數(shù)的?

肯定能啊

那行,我給你傳個(gè)?sex=1,你返回個(gè)字給我。

這還不簡(jiǎn)單? 先在controller頭頂哪里的@nestjs/common導(dǎo)入 Req然后使用

// 導(dǎo)入類型
import { Request } from 'express';
@Get()
  findAll(@Req() req: Request): string {
    console.log('req:', req.query);
    return this.catsService.findAll(req.query.sex as string);
  }

 ps: 這里獲取參數(shù)其實(shí)可以用 @Query,不知道咋的用了上面這種,哈哈哈

這時(shí)候,我打印出了所有的query參數(shù)。就差給他返回字了。

cats.service.ts
findAll(sex: string) {
    const sexObj = {
      '0': '男',
      '1': '女',
    };
    return sexObj[sex];
  }

寫好了,趕緊在APIFox看看結(jié)果。

返回結(jié)果正確,我還想在post請(qǐng)求傳param參數(shù)給你,傳傳傳,傳你個(gè)頭頭,好吧,那我想查數(shù)據(jù)庫(kù),總行了吧。

五.連接mysql數(shù)據(jù)庫(kù)

先安裝管理數(shù)據(jù)庫(kù)typeorm和連接數(shù)據(jù)庫(kù)mysql2庫(kù)

npm install --save @nestjs/typeorm typeorm mysql2

然后在app.module.ts添加配置

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { CatsModule } from './cats/cats.module';
@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: '127.0.0.1',
      port: 3306,
      username: 'root',
      password: 'root',
      database: 'blog',
      entities: ['dist/**/*.entity{.ts,.js}'],
      synchronize: true,
    }),
    CatsModule,
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

好了,數(shù)據(jù)庫(kù)連接成功。

我們現(xiàn)在是用typeorm來管理數(shù)據(jù)庫(kù),這個(gè)庫(kù)是通過實(shí)體來映射到數(shù)據(jù)庫(kù)表的,建表我們以前是直接在數(shù)據(jù)庫(kù)中創(chuàng)建表結(jié)構(gòu),現(xiàn)在我們通過實(shí)體來創(chuàng)建庫(kù)。什么意識(shí)呢?接下來一起嘗試。

在cats文件夾下,有一個(gè)entities文件夾,用來放實(shí)體的,點(diǎn)開,發(fā)現(xiàn)有個(gè)ts文件,沒錯(cuò)我們就是在這個(gè)ts文件來寫實(shí)體,也就是數(shù)據(jù)庫(kù)表結(jié)構(gòu)。

我寫了這些東西:

import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
// 建立一個(gè)實(shí)體映射到數(shù)據(jù)庫(kù)表
@Entity('cats')
export class Cat {
  @PrimaryGeneratedColumn()
  id: number;
  @Column({ length: 10 })
  name: string;
}

@Entity('cats')用來修飾說,我這個(gè)類是一個(gè)實(shí)體啊,名字叫cats,其中有字段:id、name,你按照這個(gè)結(jié)構(gòu),在mysql中創(chuàng)建一個(gè)表吧。我們打開數(shù)據(jù)庫(kù),看下是不是創(chuàng)建了一個(gè)叫cats的表呢。

好,沒什么問題,可以映射。我們?cè)偬砑右粋€(gè)desc字段試試

沒毛病。

六.操作數(shù)據(jù)庫(kù)

實(shí)體有了,怎么使用呢?

我們操作數(shù)據(jù)庫(kù)正常情況下都是在service中,那么就是去service中使用即可,直接貼代碼,我們向數(shù)據(jù)庫(kù)中插入一條數(shù)據(jù)

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { CreateCatDto } from './dto/create-cat.dto';
import { UpdateCatDto } from './dto/update-cat.dto';
import { Cat } from './entities/cat.entity';
@Injectable()
export class CatsService {
  constructor(
    @InjectRepository(Cat)
    private readonly catRepository: Repository<Cat>,
  ) {}
  async create(createCatDto: Partial<CreateCatDto>): Promise<Cat> {
    console.log(createCatDto);
    return this.catRepository.save(createCatDto);
  }
}

啊哈,保存的時(shí)候報(bào)錯(cuò)了,說什么實(shí)體沒有引用,那么我們就引用它,在cats.module.ts

import { Module } from '@nestjs/common';
import { CatsService } from './cats.service';
import { CatsController } from './cats.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Cat } from './entities/cat.entity';
@Module({
  imports: [TypeOrmModule.forFeature([Cat])],
  controllers: [CatsController],
  providers: [CatsService],
})
export class CatsModule {}

service寫好了,但是還沒調(diào)用它呢,去哪里調(diào)用啊,controller啊,這么快就忘記了嗎。

import {
  Controller,
  Get,
  Post,
  Body,
  Patch,
  Param,
  Delete,
  Req,
} from '@nestjs/common';
import { CatsService } from './cats.service';
import { CreateCatDto } from './dto/create-cat.dto';
import { UpdateCatDto } from './dto/update-cat.dto';
import { Request } from 'express';
@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}
  @Post('/create')
  create(@Body() createCatDto: CreateCatDto) {
    console.log(createCatDto);
    return this.catsService.create(createCatDto);
  }
}

細(xì)心的盆友發(fā)現(xiàn)了,說你這CreateCatDto哪里來的?你看看cats目錄下有一個(gè)dto文件夾,有個(gè)create-cat.dto.ts,它就是從這里來的,哈哈哈

export class CreateCatDto {
  name: string;
  desc: string;
}

好啦好啦,去ApiFox看下結(jié)果

發(fā)送請(qǐng)求,OK,沒報(bào)錯(cuò),我們?nèi)?shù)據(jù)庫(kù)瞧瞧,有沒有數(shù)據(jù)

牛逼啊,大哥,原來寫接口這么簡(jiǎn)單?。。?!
感謝觀看?。?!

七.中間件你應(yīng)該了解過吧,在這里應(yīng)該怎么用呢

老規(guī)矩先創(chuàng)建對(duì)應(yīng)的文件,nestjs有快捷創(chuàng)建中間件的命令呢

nest g middleware middleware/reqMi

我創(chuàng)建了一個(gè)middleware目錄下的叫reqMi中間件,命名嗎,簡(jiǎn)單了點(diǎn)。
好,看看中間件現(xiàn)在有什么

import { Injectable, NestMiddleware } from '@nestjs/common';
@Injectable()
export class ReqMiMiddleware implements NestMiddleware {
  use(req: any, res: any, next: () => void) {
    console.log('你好,我是中間件');
    next();
  }
}

我這里打印了一句話。 那么怎么調(diào)用呢?調(diào)用中間件有很多種方式,可以參考官方文檔哦。
我現(xiàn)在是在app.module.ts調(diào)用

export class AppModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(ReqMiMiddleware).forRoutes('cats');
  }
}

ReqMiMiddleware被調(diào)用啦,forRoutes('cats'),表示為路由為cats前綴的路由添加這個(gè)中間件,nestjs中間件,都是通過匹配路由路徑來調(diào)用的,官方有比較詳細(xì)的介紹。 我們現(xiàn)在去看看,是不是調(diào)用成功了呀。

控制臺(tái)打印

ok,中間件應(yīng)用成功啦。

以上就是使用Nest.js實(shí)現(xiàn)接口教程示例的詳細(xì)內(nèi)容,更多關(guān)于Nest.js接口教程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論