站長資訊網
        最全最豐富的資訊網站

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

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

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

        在學習 Nest 與數據庫進行連接時,難免會遇到選擇數據庫的問題,這里作者選擇的是 MongoDB 記錄一下簡單使用。 大家可以根據不同需求選擇合適的數據庫。

        貼出跟進看的文檔以方便大家進一步學習 Nest 中文文檔 ,MongoDB菜鳥教程


        數據庫簡介

        • MongoDB 是一個基于分布式文件存儲的數據庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴展的高性能數據存儲解決方案。

        • MongoDB 是一個介于關系數據庫和非關系數據庫之間的產品,是非關系數據庫當中功能最豐富,最像關系數據庫的。

        數據庫選擇

        • 目前市面上有很多成熟的數據庫可供大家選擇。

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

        • 據翻看各種資料作者這里得出的結論為大項目用 PostgreSql 小項目用 MongoDB 所以作者準備一起學習下,這次因為想做一個小項目練練手所以先用 MongoDB 看看怎么樣。
        • 大家有不同看法歡迎在評論區討論。

        配置基本服務

        • 確保電腦已經安裝了 MongoDB

        • 記得弄完做一下環境配置,可以開機自啟, 也可以選擇自己啟動哈hhh看個人

        Mongoose

        • 簡單介紹一下 , Mongoose 是一個操作 MongoDBNodejs 驅動庫

        • MongoDB 是數據庫,Nodejs 是js的一個運行環境,Nodejs 不直接操作 Mongodb,這個時候就需要相應的驅動程序來提供接口。

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

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

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

        基礎功能模塊

        • 這里用一個 User 模塊來做 demo

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

        • 對這幾個模塊做一些簡單介紹:

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

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

        Schema

        • Mongoose中,一切都源于 Scheme,每個 Schema 都會映射到 MongoDB 的一個集合,并定義集合內文檔的結構。Schema 被用來定義模型,而模型負責從底層創建和讀取 MongoDB 的文檔。

        • Schema 可以用 NestJS 內置的裝飾器來創建,或者也可以自己動手使用 Mongoose的常規方式。使用裝飾器來創建 Schema 會極大大減少引用并且提高代碼的可讀性。這里作者用的是官方推薦方式用裝飾器來創建,畢竟用的是 Nest 不得用點特色的hhh。

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

        Service

        • 控制器的目的是接收應用的特定請求。路由機制控制哪個控制器接收哪些請求。通常,每個控制器有多個路由,不同的路由可以執行不同的操作。

              /* 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 {       // 注冊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 方法刪除成功并返回相應的個數             const temp = await this.userTest.remove({ _id: sid });             return temp;           }           // 修改           async updateUser(sid: string, data: any) {             // 這里是異步的  remove 方法刪除成功并返回相應的個數             const temp = await this.userTest.updateOne({ _id: sid }, { $set: data });             return temp;           }     }
        • 等下和其他功能一起在 Module 中引入。

        Controller

        • 控制器的目的是接收應用的特定請求。路由機制控制哪個控制器接收哪些請求。通常,每個控制器有多個路由,不同的路由可以執行不同的操作。

              /* user.controller.ts */     // 引入 Nest.js 內置的各個功能     import { Body, Controller, Delete, Get, Param, Post, Put, Query } from '@nestjs/common';     // 引入用戶服務     import { UserService } from './user.service';     // 引入創建用戶 DTO 用于限制從接口處傳來的參數     import { CreateUserDto } from './user.dto';     // 配置局部路由     @Controller('user')     export class UserController {       constructor(private readonly userService: UserService) {}       // 創建user路由 user/createUser       @Post('createUser')       async createUser(@Body() body: CreateUserDto) {         return this.userService.create(body);       }       //查找所有 user 路由       @Get('findAll')       async findAll() {         return this.userService.findAll();       }       // 查找某一個用戶路由       @Get('findOne')       async findOne(@Query() query: any) {         return this.userService.findOne(query.name);       }       // 刪除一個用戶的路由       @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() 裝飾器提供了元數據,Nest 用它來組織應用程序結構。

        • 我們把以上內容引入到我們的 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()方法來配置模塊,包括定義哪些模型應該注冊在當前范圍中。        // 如果你還想在另外的模塊中使用這個模型,將MongooseModule添加到CatsModule的exports部分并在其他模塊中導入CatsModule。        // 這里的 name:'User' 為數據庫表名稱與 service 中注入的表名稱對應兩者不一樣會報錯       imports: [MongooseModule.forFeature([{ name: 'User', schema: UserSchema }])],       controllers: [UserController],       providers: [UserService],     })     export class UserModule {}
          • 以上我們的基礎布局完成,可以進行接口檢驗了

        接口檢驗

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

        POST 增

        • 這里我使用 POST 請求,路由為/api/user/createUser 因為要限制請求參數的數據類型所以這里方式為 application/json

        • 因為這里我們之前定義的 User 數據模型為 name,age,height, 所以請求里面只需要這幾個參數即可,別的就算寫進去也添加不到集合中

        • Postman

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

        • 打開 MongoDB Compass 查看數據

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

        • 可以看到我們已經添加到數據庫中一條數據,接下來我們在添加兩條,方便等會的查詢/刪除/更改操作

        GET 查所有

        • 這里我使用 GET 請求,,路由為/api/user/findAll 因為這里是查 User 集合內所有數據,所以不用添加請求參數

        • Postman

          聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

        • 打開 MongoDB Compass 查看數據

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

        • 可以看到我們已經查詢到數據庫中剛才在 User 集合中添加的三條數據切記要點 REFRESH 建不然軟件不會自己刷新

        GET 查單個用戶

        • 這里我使用 GET 請求,路由為/api/user/findOne 因為這里是查 User 集合內對應搜索條件的數據集合,這里我們用的是name 去查詢的。也可以用唯一值 id 去查詢。

        • Postman

        聊聊node中怎么使用Nest.js 連接 MongoDB 數據庫

        • 可以看到返回結果是一個集合,了解

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 99免费精品国产| 国内精品久久久久久久coent| 成人精品一区二区三区| 亚洲伊人久久精品影院| 国产精品亚洲专区无码WEB| 国产精品久久久亚洲| 中文字幕在线精品视频入口一区| 国产视频精品免费视频| 久久九九青青国产精品| 国产日韩精品欧美一区喷水 | 国内精品久久久久影院一蜜桃| 久久久久久久久久久免费精品 | 亚洲精品无码不卡在线播HE| 国产综合精品蜜芽| 一区二区三区国产精品| 精品国产一区二区三区免费 | 精品日韩亚洲AV无码 | 国产一精品一av一免费爽爽| 精品无码av一区二区三区| 亚洲国产精品无码久久| 亚洲精品少妇30p| 亚洲精品无码精品mV在线观看| 亚洲精品成人久久久| 亚洲av午夜成人片精品电影| 久久激情亚洲精品无码?V| 国产精品最新国产精品第十页| 8050免费午夜一级国产精品| 亚洲午夜精品久久久久久人妖| 欧美精品/日韩精品/国产精品| 国产精品亚洲片在线va| 国内精品51视频在线观看| 国产精品网址你懂的| 久久99精品国产麻豆宅宅| 久久国产成人精品麻豆| 亚洲精品高清国产一久久| 91精品一区二区综合在线| 国产99精品一区二区三区免费| 99久久精品无码一区二区毛片 | 97久视频精品视频在线老司机 | 亚洲精品午夜无码电影网| 亚洲国产第一站精品蜜芽|