最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Nest.js實現接口教程示例

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

一.項目初始化

1.安裝腳手架

npm i -g @nestjs/cli

2.創(chuàng)建項目

nest new 項目名稱

3. cd 到項目

4.安裝依賴

npm i

5.啟動項目,監(jiān)視文件,自動重新編譯和重新加載服務器

npm run start:dev

6.查看啟動項目啟動端口號,進入程序入口文件 src/main.ts 查看

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

二.核心文件介紹

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

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

app.module.ts 應用程序的根模塊。

app.service.ts 寫數據庫查詢語句的地方。

main.ts 應用程序的入口文件,它使用核心函數NestFactory創(chuàng)建一個 Nest 應用程序實例。

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

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

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

nest g resource cats

選擇 REST API風格。

好了,現在src文件目錄下多了cats目錄,趕緊看看吧。

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

四.看看cats模塊有啥吧

1.先看controller吧,請求方法都在這了

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

接下去看吧,有一個@Controller('cats'),這是個裝飾器,里面有個參數喔,估計是路由前綴吧,接著看有幾個@開頭的 post、get、delete的東東,應該是接口方法,嗯,是的,我們去用APIFox請求一下

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

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

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

2.你這地址有點單調啊,能不能接收query參數的?

肯定能啊

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

這還不簡單? 先在controller頭頂哪里的@nestjs/common導入 Req然后使用

// 導入類型
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: 這里獲取參數其實可以用 @Query,不知道咋的用了上面這種,哈哈哈

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

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

寫好了,趕緊在APIFox看看結果。

返回結果正確,我還想在post請求傳param參數給你,傳傳傳,傳你個頭頭,好吧,那我想查數據庫,總行了吧。

五.連接mysql數據庫

先安裝管理數據庫typeorm和連接數據庫mysql2

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

好了,數據庫連接成功。

我們現在是用typeorm來管理數據庫,這個庫是通過實體來映射到數據庫表的,建表我們以前是直接在數據庫中創(chuàng)建表結構,現在我們通過實體來創(chuàng)建庫。什么意識呢?接下來一起嘗試。

在cats文件夾下,有一個entities文件夾,用來放實體的,點開,發(fā)現有個ts文件,沒錯我們就是在這個ts文件來寫實體,也就是數據庫表結構。

我寫了這些東西:

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

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

好,沒什么問題,可以映射。我們再添加一個desc字段試試

沒毛病。

六.操作數據庫

實體有了,怎么使用呢?

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

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

啊哈,保存的時候報錯了,說什么實體沒有引用,那么我們就引用它,在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寫好了,但是還沒調用它呢,去哪里調用啊,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);
  }
}

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

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

好啦好啦,去ApiFox看下結果

發(fā)送請求,OK,沒報錯,我們去數據庫瞧瞧,有沒有數據

牛逼啊,大哥,原來寫接口這么簡單?。。。?br />感謝觀看?。。?/p>

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

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

nest g middleware middleware/reqMi

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

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

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

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

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

控制臺打印

ok,中間件應用成功啦。

以上就是使用Nest.js實現接口教程示例的詳細內容,更多關于Nest.js接口教程的資料請關注腳本之家其它相關文章!

相關文章

  • 從parcel.js打包出錯到選擇nvm的全部過程

    從parcel.js打包出錯到選擇nvm的全部過程

    這篇文章主要介紹了從parcel.js打包出錯到選擇nvm的全部過程,需要的朋友可以參考下
    2018-01-01
  • js替換字符串中所有指定的字符(實現代碼)

    js替換字符串中所有指定的字符(實現代碼)

    下面小編就為大家?guī)硪黄猨s替換字符串中所有指定的字符(實現代碼)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • javascript制作的cookie封裝及使用指南

    javascript制作的cookie封裝及使用指南

    這篇文章主要介紹了javascript制作的cookie封裝及使用指南,需要的朋友可以參考下
    2015-01-01
  • 詳解JavaScript的函數簡介

    詳解JavaScript的函數簡介

    這篇文章主要為大家介紹了JavaScript的函數簡介,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • uniapp項目打包為桌面應用的方法步驟

    uniapp項目打包為桌面應用的方法步驟

    本文主要介紹了uniapp項目打包為桌面應用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • 關于js布爾型、null和undefined以及類型檢測舉例詳解

    關于js布爾型、null和undefined以及類型檢測舉例詳解

    這篇文章主要介紹了關于js布爾型、null和undefined以及類型檢測的相關資料,涵蓋隱式轉換、相等比較及常用檢測技巧,幫助避免開發(fā)中的常見錯誤,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-05-05
  • js設置和獲取自定義屬性的方法

    js設置和獲取自定義屬性的方法

    下面小編就為大家?guī)硪黄猨s設置和獲取自定義屬性的方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • 如何利用JavaScript?實現繼承

    如何利用JavaScript?實現繼承

    這篇文章主要介紹了如何利用JavaScript?實現繼承,JavaScript?在編程語言界是個特殊種類,它和其他編程語言很不一樣,JavaScript可以在運行的時候動態(tài)地改變某個變量的類型,下面小編將繼續(xù)介紹JavaScript如何實現繼承,需要的朋友可以參考下
    2022-02-02
  • Web componentd組件內部事件回調及痛點剖析

    Web componentd組件內部事件回調及痛點剖析

    這篇文章主要為大家介紹了Web componentd組件內部事件回調示例及其痛點的剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2021-11-11
  • JavaScript的模塊化:封裝(閉包),繼承(原型) 介紹

    JavaScript的模塊化:封裝(閉包),繼承(原型) 介紹

    在復雜的邏輯下, JavaScript 需要被模塊化,模塊需要封裝起來,只留下供外界調用的接口。閉包是 JavaScript 中實現模塊封裝的關鍵,也是很多初學者難以理解的要點
    2013-07-07

最新評論

长春市| 遵义市| 中江县| 大方县| 石楼县| 太仓市| 湖北省| 沅陵县| 义乌市| 肥西县| 泸西县| 忻州市| 高台县| 海南省| 家居| 调兵山市| 土默特左旗| 特克斯县| 治多县| 同德县| 海丰县| 白朗县| 庄浪县| 临武县| 南通市| 广汉市| 太湖县| 吐鲁番市| 承德县| 射洪县| 昔阳县| 宜州市| 乐山市| 报价| 宜兰市| 沂水县| 义乌市| 沁阳市| 乾安县| 衡南县| 临猗县|