久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

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

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

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

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

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

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


數(shù)據(jù)庫簡介

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

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

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

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

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

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

配置基本服務

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

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

Mongoose

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

  • MongoDB 是數(shù)據(jù)庫,Nodejs 是js的一個運行環(huán)境,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 方法連接數(shù)據(jù)庫   imports: [UserModule, MongooseModule.forRoot('mongodb://localhost/test')],   controllers: [AppController],   providers: [AppService], }) export class AppModule {}

基礎功能模塊

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

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

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

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

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

Schema

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

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

  •   /* user.schema.ts */    import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';   // @Prop 裝飾器接受一個可選的參數(shù),通過這個,你可以指示這個屬性是否是必須的,是否需要默認值,或者是標記它作為一個常量,下面是例子   // SchemaFactory 是 mongoose 內(nèi)置的一個方法做用是讀取模式文檔 并創(chuàng)建 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

  • 控制器的目的是接收應用的特定請求。路由機制控制哪個控制器接收哪些請求。通常,每個控制器有多個路由,不同的路由可以執(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 {       // 注冊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 方法刪除成功并返回相應的個數(shù)             const temp = await this.userTest.remove({ _id: sid });             return temp;           }           // 修改           async updateUser(sid: string, data: any) {             // 這里是異步的  remove 方法刪除成功并返回相應的個數(shù)             const temp = await this.userTest.updateOne({ _id: sid }, { $set: data });             return temp;           }     }
  • 等下和其他功能一起在 Module 中引入。

Controller

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

        /* user.controller.ts */     // 引入 Nest.js 內(nèi)置的各個功能     import { Body, Controller, Delete, Get, Param, Post, Put, Query } from '@nestjs/common';     // 引入用戶服務     import { UserService } from './user.service';     // 引入創(chuàng)建用戶 DTO 用于限制從接口處傳來的參數(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();       }       // 查找某一個用戶路由       @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() 裝飾器提供了元數(shù)據(jù),Nest 用它來組織應用程序結構。

  • 我們把以上內(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()方法來配置模塊,包括定義哪些模型應該注冊在當前范圍中。        // 如果你還想在另外的模塊中使用這個模型,將MongooseModule添加到CatsModule的exports部分并在其他模塊中導入CatsModule。        // 這里的 name:'User' 為數(shù)據(jù)庫表名稱與 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 因為要限制請求參數(shù)的數(shù)據(jù)類型所以這里方式為 application/json

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

  • Postman

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

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

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

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

GET 查所有

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

  • Postman

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

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

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

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

GET 查單個用戶

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

  • Postman

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

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

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
五月激激激综合网色播| 美女亚洲一区| 久久精品女人| 日韩三区免费| 久久中文字幕一区二区三区| 国产精品久久久久久久久久齐齐 | 麻豆高清免费国产一区| 日本伊人午夜精品| 蜜乳av另类精品一区二区| 久久中文字幕av| 激情欧美一区二区三区| 视频一区中文| 亚洲一区二区三区在线免费| 日韩黄色av| 捆绑调教美女网站视频一区| 国产精品久久久久久久免费观看 | 好看不卡的中文字幕| 欧美日韩激情在线一区二区三区| 欧美va天堂| 亚洲一区黄色| 亚洲精品乱码久久久久久蜜桃麻豆 | 成人三级高清视频在线看| 岛国av在线网站| 亚洲精品91| 天堂va蜜桃一区二区三区| 亚洲综合五月| 国产精品18| 久久亚洲精品中文字幕蜜潮电影| 亚洲欧美日韩综合国产aⅴ| 亚州av一区| 精品一区av| 亚洲精品一区二区妖精| 日本在线视频一区二区| 国产一区二区三区免费在线| 极品日韩av| 日韩av电影一区| 五月天av在线| 亚洲精品进入| 精品九九久久| 久久国产99| 日本久久二区| 国产激情在线播放| 午夜在线视频观看日韩17c| 欧美性www| 亚洲a在线视频| 日韩一区二区三区免费视频| а√天堂中文在线资源8| 视频一区二区国产| 美女精品久久| 丝袜a∨在线一区二区三区不卡| 国产精品毛片aⅴ一区二区三区| 久久国产日韩| 欧美另类中文字幕| 亚洲不卡av不卡一区二区| 涩涩涩久久久成人精品| 久久精品资源| 99tv成人| 国产精品日本一区二区三区在线| 999国产精品永久免费视频app| 自拍自偷一区二区三区| 福利在线一区| 在线精品亚洲| 亚洲精品在线影院| 中文一区二区| 欧美午夜精彩| 国户精品久久久久久久久久久不卡| 国产成人免费av一区二区午夜| 精品亚洲a∨| 电影天堂国产精品| 性欧美xxxx免费岛国不卡电影| 欧美亚洲tv| 国产精品13p| 国产精品伦理久久久久久| 亚洲综合在线电影| 日本美女一区| 视频一区二区中文字幕| 99精品视频在线观看免费播放| 成人在线视频免费| 亚洲作爱视频| 玖玖精品视频| 亚洲1区在线观看| 欧美激情日韩| 久久99青青| 日韩一区二区三区在线免费观看| 欧美在线影院| 日韩专区在线视频| аⅴ资源天堂资源库在线| 三级欧美韩日大片在线看| 中文另类视频| 成午夜精品一区二区三区软件| 日韩在线观看中文字幕| 极品日韩av| 久久久精品五月天| 精品三级国产| 欧美日韩 国产精品| 蘑菇福利视频一区播放| 色爱av综合网| 国产a久久精品一区二区三区| 日韩福利视频导航| 国产精品日本| av在线最新| 精品三级在线| 精品一区91| 国产高清日韩| 国产亚洲一区| 91成人精品观看| 蜜臀91精品一区二区三区| 激情婷婷综合| 欧美日韩少妇| 9久re热视频在线精品| 亚洲高清av| 欧美天堂视频| 成人福利视频| 日韩免费在线| 色偷偷色偷偷色偷偷在线视频| 欧美国产不卡| 免费一级欧美在线观看视频 | 久久视频精品| 久久久久中文| 久久久久免费av| 久久蜜桃av| 91久久久精品国产| 亚洲欧洲另类| 久久福利毛片| 亚洲日本免费电影| 欧美一级一区| 欧美日韩一区自拍| 欧美久久一区二区三区| 国产精品亚洲综合在线观看| 国产精品扒开腿做爽爽爽软件| 久久99影视| 首页国产精品| 午夜av成人| 亚洲一区免费| 午夜久久av| 国产精品密蕾丝视频下载| 精品久久在线| 日产精品一区| 日韩一级欧洲| 婷婷精品在线| 国产精品男女| 欧美国产亚洲精品| 成人精品高清在线视频| 美女福利一区二区三区| 99国产精品免费视频观看| 欧美日韩国产在线一区| 无码日韩精品一区二区免费| 国产精品网在线观看| 久久精品国产亚洲一区二区三区| 亚洲国产成人二区| 婷婷综合激情| 日本不卡一区二区三区| 国产福利亚洲| 久久国产中文字幕| 亚洲小说春色综合另类电影| 久久国产乱子精品免费女| 九九久久国产| 欧美粗暴jizz性欧美20| 日本一不卡视频| 精品不卡一区| 亚洲先锋成人| 日韩av三区| 韩国精品主播一区二区在线观看 | 蜜桃一区二区三区| 日韩中文字幕无砖| 麻豆91精品91久久久的内涵| 99成人超碰| 日本天堂一区| 亚洲成人av观看| 天堂va欧美ⅴa亚洲va一国产| 欧美黄色精品| 久久精品播放| 911亚洲精品| 久久五月天小说| 97精品国产99久久久久久免费| 日韩88av| 亚洲精品免费观看| 成人国产精品一区二区网站| 国产视频欧美| 电影91久久久| 免费在线看一区| 国产成人精选| 亚洲尤物av| 国产美女高潮在线观看| 中文字幕亚洲精品乱码| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 久久国产精品久久w女人spa| 久久狠狠久久| 亚洲激精日韩激精欧美精品| 国产精品久久久久久久久久齐齐 | 韩国一区二区三区视频| 午夜在线视频一区二区区别| 久久影院资源站| 蜜臀久久99精品久久久久宅男| 国产一区2区| 日韩精品免费一区二区夜夜嗨| 欧美aa一级| 麻豆精品视频在线| 亚洲一区二区三区无吗| 日本久久精品|