久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)?下面本篇文章給大家介紹一下node 框架 Nest.js 使用 MongoDB 的方法,希望對(duì)大家有所幫助!

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      在學(xué)習(xí) Nest 與數(shù)據(jù)庫(kù)進(jìn)行連接時(shí),難免會(huì)遇到選擇數(shù)據(jù)庫(kù)的問(wèn)題,這里作者選擇的是 MongoDB 記錄一下簡(jiǎn)單使用。 大家可以根據(jù)不同需求選擇合適的數(shù)據(jù)庫(kù)。

      貼出跟進(jìn)看的文檔以方便大家進(jìn)一步學(xué)習(xí) Nest 中文文檔 ,MongoDB菜鳥(niǎo)教程


      數(shù)據(jù)庫(kù)簡(jiǎn)介

      • MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)。由 C++ 語(yǔ)言編寫(xiě)。旨在為 WEB 應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。

      • MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。

      數(shù)據(jù)庫(kù)選擇

      • 目前市面上有很多成熟的數(shù)據(jù)庫(kù)可供大家選擇。

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      • 據(jù)翻看各種資料作者這里得出的結(jié)論為大項(xiàng)目用 PostgreSql 小項(xiàng)目用 MongoDB 所以作者準(zhǔn)備一起學(xué)習(xí)下,這次因?yàn)橄胱鲆粋€(gè)小項(xiàng)目練練手所以先用 MongoDB 看看怎么樣。
      • 大家有不同看法歡迎在評(píng)論區(qū)討論。

      配置基本服務(wù)

      • 確保電腦已經(jīng)安裝了 MongoDB 沒(méi)

      • 記得弄完做一下環(huán)境配置,可以開(kāi)機(jī)自啟, 也可以選擇自己?jiǎn)?dòng)哈hhh看個(gè)人

      Mongoose

      • 簡(jiǎn)單介紹一下 , Mongoose 是一個(gè)操作 MongoDBNodejs 驅(qū)動(dòng)庫(kù)

      • MongoDB 是數(shù)據(jù)庫(kù),Nodejs 是js的一個(gè)運(yùn)行環(huán)境,Nodejs 不直接操作 Mongodb,這個(gè)時(shí)候就需要相應(yīng)的驅(qū)動(dòng)程序來(lái)提供接口。

      • 在 Nest 項(xiàng)目中安裝一下依賴項(xiàng),兩種安裝方式,自行選擇

         $ npm install --save @nestjs/mongoose mongoose  // NPM 安裝  $ yarn add @nestjs/mongoose mongoose  // YARN 安裝復(fù)制代碼
      • 安裝完成后我們?cè)?AppModule 文件中引入一下

         /* app.module.ts */ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; // 我自己準(zhǔn)備的 USER 模塊 import { UserModule } from './user/user.module'; // 引入 Mongoose  import { MongooseModule } from '@nestjs/mongoose'; @Module({   // 用 forRoot 方法連接數(shù)據(jù)庫(kù)   imports: [UserModule, MongooseModule.forRoot('mongodb://localhost/test')],   controllers: [AppController],   providers: [AppService], }) export class AppModule {}

      基礎(chǔ)功能模塊

      • 這里用一個(gè) User 模塊來(lái)做 demo

      • 這里我理解的基礎(chǔ)功能模塊包括 module(模塊) Controller(控制器) Service(提供者) Schema(數(shù)據(jù)模型) 我們主要是用 Nest對(duì) MongoDB 做增刪改查 這幾個(gè)模塊目前暫時(shí)夠用。

      • 對(duì)這幾個(gè)模塊做一些簡(jiǎn)單介紹:

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      • 由于我們上面已經(jīng)對(duì) app.module.ts 該根模塊已經(jīng)引入過(guò)了 mongoose 所以下面我們之間看一下功能模塊是怎樣的

      Schema

      • Mongoose中,一切都源于 Scheme,每個(gè) Schema 都會(huì)映射到 MongoDB 的一個(gè)集合,并定義集合內(nèi)文檔的結(jié)構(gòu)。Schema 被用來(lái)定義模型,而模型負(fù)責(zé)從底層創(chuàng)建和讀取 MongoDB 的文檔。

      • Schema 可以用 NestJS 內(nèi)置的裝飾器來(lái)創(chuàng)建,或者也可以自己動(dòng)手使用 Mongoose的常規(guī)方式。使用裝飾器來(lái)創(chuàng)建 Schema 會(huì)極大大減少引用并且提高代碼的可讀性。這里作者用的是官方推薦方式用裝飾器來(lái)創(chuàng)建,畢竟用的是 Nest 不得用點(diǎn)特色的hhh。

      •   /* user.schema.ts */    import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';   // @Prop 裝飾器接受一個(gè)可選的參數(shù),通過(guò)這個(gè),你可以指示這個(gè)屬性是否是必須的,是否需要默認(rèn)值,或者是標(biāo)記它作為一個(gè)常量,下面是例子   // SchemaFactory 是 mongoose 內(nèi)置的一個(gè)方法做用是讀取模式文檔 并創(chuàng)建 Schema 對(duì)象   import { Document } from 'mongoose';   export type UserDocument = User & Document;   @Schema()   export class User extends Document {     @Prop()     name: string;     // 設(shè)置值為必填     @Prop({ required: true })     age: number;     @Prop()     height: number;   }   export const UserSchema = SchemaFactory.createForClass(User);
      • 等下和其他功能一起在 Module 中引入。

      Service

      • 控制器的目的是接收應(yīng)用的特定請(qǐng)求。路由機(jī)制控制哪個(gè)控制器接收哪些請(qǐng)求。通常,每個(gè)控制器有多個(gè)路由,不同的路由可以執(zhí)行不同的操作。

            /* user.service.ts */     import { Model } from 'mongoose';     import { InjectModel } from '@nestjs/mongoose';     import { User, UserDocument } from 'src/schema/user.schema';     import { CreateUserDto } from './user.dto';     @Injectable()     export class UserService {       // 注冊(cè)Schema后,可以使用 @InjectModel() 裝飾器將 User 模型注入到 UserService 中:         constructor(@InjectModel('User') private userTest: Model<UserDocument>) {}           // 添加           async create(createUserDto: CreateUserDto): Promise<User> {             const createUser = new this.userTest(createUserDto);             const temp = await createUser.save();             return temp;           }           // 查找           async findAll(): Promise<User[]> {             // 這里是異步的             const temp = await this.userTest.find().exec();             return temp;           }           // 查找           async findOne(name: string): Promise<User[]> {             // 這里是異步的             const temp = await this.userTest.find({ name });             return temp;           }           // 刪除           async delete(sid: number) {             // 這里是異步的  remove 方法刪除成功并返回相應(yīng)的個(gè)數(shù)             const temp = await this.userTest.remove({ _id: sid });             return temp;           }           // 修改           async updateUser(sid: string, data: any) {             // 這里是異步的  remove 方法刪除成功并返回相應(yīng)的個(gè)數(shù)             const temp = await this.userTest.updateOne({ _id: sid }, { $set: data });             return temp;           }     }
      • 等下和其他功能一起在 Module 中引入。

      Controller

      • 控制器的目的是接收應(yīng)用的特定請(qǐng)求。路由機(jī)制控制哪個(gè)控制器接收哪些請(qǐng)求。通常,每個(gè)控制器有多個(gè)路由,不同的路由可以執(zhí)行不同的操作。

            /* user.controller.ts */     // 引入 Nest.js 內(nèi)置的各個(gè)功能     import { Body, Controller, Delete, Get, Param, Post, Put, Query } from '@nestjs/common';     // 引入用戶服務(wù)     import { UserService } from './user.service';     // 引入創(chuàng)建用戶 DTO 用于限制從接口處傳來(lái)的參數(shù)     import { CreateUserDto } from './user.dto';     // 配置局部路由     @Controller('user')     export class UserController {       constructor(private readonly userService: UserService) {}       // 創(chuàng)建user路由 user/createUser       @Post('createUser')       async createUser(@Body() body: CreateUserDto) {         return this.userService.create(body);       }       //查找所有 user 路由       @Get('findAll')       async findAll() {         return this.userService.findAll();       }       // 查找某一個(gè)用戶路由       @Get('findOne')       async findOne(@Query() query: any) {         return this.userService.findOne(query.name);       }       // 刪除一個(gè)用戶的路由       @Delete(':sid')       deleteUser(@Param() param: any) {         return this.userService.delete(param.sid);       }       // 更改用戶信息的路由       @Put(':sid')       updateUser(@Body() body: any, @Param() param: any) {         return this.userService.updateUser(param.sid, body);       }     }

      Moudle

      • 模塊是具有 @Module() 裝飾器的類。 @Module() 裝飾器提供了元數(shù)據(jù),Nest 用它來(lái)組織應(yīng)用程序結(jié)構(gòu)。

      • 我們把以上內(nèi)容引入到我們的 User 模塊中

            /* user.module.ts */     import { Module } from '@nestjs/common';     import { UserController } from './user.controller';     import { UserService } from './user.service';     import { MongooseModule } from '@nestjs/mongoose';     import { UserSchema } from 'src/schema/user.schema';     @Module({        // MongooseModule提供了forFeature()方法來(lái)配置模塊,包括定義哪些模型應(yīng)該注冊(cè)在當(dāng)前范圍中。        // 如果你還想在另外的模塊中使用這個(gè)模型,將MongooseModule添加到CatsModule的exports部分并在其他模塊中導(dǎo)入CatsModule。        // 這里的 name:'User' 為數(shù)據(jù)庫(kù)表名稱與 service 中注入的表名稱對(duì)應(yīng)兩者不一樣會(huì)報(bào)錯(cuò)       imports: [MongooseModule.forFeature([{ name: 'User', schema: UserSchema }])],       controllers: [UserController],       providers: [UserService],     })     export class UserModule {}
        • 以上我們的基礎(chǔ)布局完成,可以進(jìn)行接口檢驗(yàn)了

      接口檢驗(yàn)

      • 處理這些配置我們還在 main.ts 文件中配置了全局路由 app.setGlobalPrefix('api'); 意思就是所有請(qǐng)求前面會(huì)有一個(gè) /api/
      • 這里我們用的 PostManMongoDB Compass 官方推薦的可視化工具查看效果

      POST 增

      • 這里我使用 POST 請(qǐng)求,路由為/api/user/createUser 因?yàn)橐拗普?qǐng)求參數(shù)的數(shù)據(jù)類型所以這里方式為 application/json

      • 因?yàn)檫@里我們之前定義的 User 數(shù)據(jù)模型為 name,age,height, 所以請(qǐng)求里面只需要這幾個(gè)參數(shù)即可,別的就算寫(xiě)進(jìn)去也添加不到集合中

      • Postman

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      • 打開(kāi) MongoDB Compass 查看數(shù)據(jù)

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      • 可以看到我們已經(jīng)添加到數(shù)據(jù)庫(kù)中一條數(shù)據(jù),接下來(lái)我們?cè)谔砑觾蓷l,方便等會(huì)的查詢/刪除/更改操作

      GET 查所有

      • 這里我使用 GET 請(qǐng)求,,路由為/api/user/findAll 因?yàn)檫@里是查 User 集合內(nèi)所有數(shù)據(jù),所以不用添加請(qǐng)求參數(shù)

      • Postman

        聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      • 打開(kāi) MongoDB Compass 查看數(shù)據(jù)

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      • 可以看到我們已經(jīng)查詢到數(shù)據(jù)庫(kù)中剛才在 User 集合中添加的三條數(shù)據(jù)切記要點(diǎn) REFRESH 建不然軟件不會(huì)自己刷新

      GET 查單個(gè)用戶

      • 這里我使用 GET 請(qǐng)求,路由為/api/user/findOne 因?yàn)檫@里是查 User 集合內(nèi)對(duì)應(yīng)搜索條件的數(shù)據(jù)集合,這里我們用的是name 去查詢的。也可以用唯一值 id 去查詢。

      • Postman

      聊聊node中怎么使用Nest.js 連接 MongoDB 數(shù)據(jù)庫(kù)

      • 可以看到返回結(jié)果是一個(gè)集合,了解

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)