


Mari kita bincangkan tentang cara menggunakan Nest.js untuk menyambung ke pangkalan data MongoDB dalam nod
Bagaimana untuk menggunakan Nest.js dalam
nod untuk menyambung ke pangkalan data MongoDB? Artikel berikut akan memperkenalkan kepada anda cara menggunakan MongoDB dalam rangka kerja nod Nest.js saya harap ia akan membantu anda.
Apabila belajar menyambungkan Nest ke pangkalan data, anda pasti akan menghadapi masalah memilih pangkalan data Di sini pengarang memilih MongoDB
untuk merekod penggunaan mudah. Anda boleh memilih pangkalan data yang sesuai mengikut keperluan yang berbeza.
Siarkan dokumen susulan untuk memudahkan pembelajaran lanjutDokumen Nest Chinese,Tutorial Newbie MongoDB
Pengenalan Pangkalan Data
MongoDB ialah pangkalan data berdasarkan storan fail yang diedarkan. Ditulis dalam bahasa C. Direka bentuk untuk menyediakan penyelesaian storan data berprestasi tinggi berskala untuk aplikasi WEB.
MongoDB ialah produk antara pangkalan data hubungan dan pangkalan data bukan hubungan.
Pemilihan Pangkalan Data
- Terdapat banyak pangkalan data matang di pasaran untuk anda pilih.
- Menurut membaca pelbagai bahan, penulis membuat kesimpulan bahawa ia sesuai untuk projek besar
PostgreSql
dan projek kecilMongoDB
jadi penulis bersedia untuk bekerjasama Mari belajar Kali ini saya ingin membuat projek kecil untuk mempraktikkan kemahiran saya, jadi saya akan menggunakanMongoDB
terlebih dahulu dan lihat bagaimana keadaannya. - Jika anda mempunyai pendapat yang berbeza, sila berasa bebas untuk membincangkannya di ruangan komen.
Konfigurasikan perkhidmatan asas
Pastikan komputer telah dipasang
MongoDB
TidakIngat untuk menyelesaikan ia Konfigurasi persekitaran, anda boleh memulakannya secara automatik selepas boot, atau anda boleh memilih untuk memulakannya sendiri hahh, ia bergantung pada individu
Mongoose
Pengenalan ringkas,
Mongoose
YaMongoDB
perpustakaan pemacuNodejs
yang mengendalikan
MongoDB
ialah pangkalan data,Nodejs
ialah persekitaran berjalan untuk js,Nodejs
tidak beroperasi secara langsungMongodb
, ini Pada masa ini, pemacu yang sepadan diperlukan untuk menyediakan antara muka.-
Pasang dependencies dalam projek Nest, terdapat dua kaedah pemasangan, pilih sendiri
$ npm install --save @nestjs/mongoose mongoose // NPM 安装 $ yarn add @nestjs/mongoose mongoose // YARN 安装复制代码
-
Selepas pemasangan selesai, kami akan memasangnya dalam fail AppModule Perkenalkan modul fungsi asas
/* 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 {}
Di sini kami menggunakan modul Pengguna untuk melakukan demo
-
Modul berfungsi asas yang saya faham di sini termasuk
module
(modul)Controller
(pengawal)Service
(penyedia)Schema
(model data) Kami terutamanya menggunakanNest对
MongoDB
untuk tambahan Modul pemadaman, pengubahsuaian dan semakan ini mencukupi buat masa ini. Pengenalan ringkas kepada modul ini:
Disebabkan Kami ada memperkenalkan modul akar app.module.ts di atas
mongoose
, jadi mari kita lihat rupa modul berfungsi
Skema
Dalam
Mongoose
, semuanya berasal daripada Skim, setiapSchema
akan dipetakan kepada koleksiMongoDB
dan mentakrifkan struktur dokumen dalam koleksi.Schema
digunakan untuk mentakrifkan model dan model bertanggungjawab untuk mencipta dan membaca dokumenMongoDB
dari bawah.Schema
boleh dibuat menggunakanNestJS
penghias terbina dalam, atau anda boleh melakukannya sendiri menggunakanMongoose
kaedah konvensional. Menggunakan penghias untuk mencipta akan mengurangkan rujukan dan meningkatkan kebolehbacaan kod. Di sini penulis menggunakan kaedah yang disyorkan rasmi untuk menciptanya dengan penghias Lagipun, saya menggunakan Nest dan saya tidak dibenarkan menggunakan sesuatu yang istimewa hhh.Schema
/* 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);
- Ia akan diperkenalkan dalam Modul bersama-sama dengan fungsi lain nanti.
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/
- 这里我们用的
PostMan
和MongoDB Compass
官方推荐的可视化工具查看效果
POST 增
这里我使用
POST
请求,路由为/api/user/createUser
因为要限制请求参数的数据类型所以这里方式为application/json
因为这里我们之前定义的 User 数据模型为 name,age,height, 所以请求里面只需要这几个参数即可,别的就算写进去也添加不到集合中
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经添加到数据库中一条数据,接下来我们在添加两条,方便等会的查询/删除/更改操作
GET 查所有
这里我使用
GET
请求,,路由为/api/user/findAll
因为这里是查 User 集合内所有数据,所以不用添加请求参数-
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经查询到数据库中刚才在
User
集合中添加的三条数据切记要点REFRESH
建不然软件不会自己刷新
GET 查单个用户
这里我使用
GET
请求,路由为/api/user/findOne
因为这里是查 User 集合内对应搜索条件的数据集合,这里我们用的是name 去查询的。也可以用唯一值 id 去查询。Postman
可以看到返回结果是一个集合,了解更多查询方式可以看下官网
PUT 改
这里我使用
PUT
请求,路由为/api/user/:sid
因为要限制请求参数的数据类型所以这里方式为application/json
因为这里我们之前定义的 User 数据模型为 age,height, 所以请求里面只需要这几个参数即可,别的就算写进去也添加不到集合中,我们这里传入数据库中小明的_id
61eea1b4144ea374a5b8455a
传入Param
中 ,然后把要修改的内容放入Body
中-
Postman
打开 MongoDB Compass 查看数据
可以看到我们已经把小明的年龄与身高做了修改
DELETE Delete
Di sini saya menggunakan
DELETE
untuk meminta, dan laluannya ialah/api/user/:sid
Kerana saya ingin mengehadkan jenis data permintaan parameter, kaedahnya di sini ialahapplication/json
Di sini kita luluskan _id
61eea1b4144ea374a5b8455a
Xiao Ming dalam pangkalan data ke dalamParam
dan mulakan permintaan-
Posmen
Buka MongoDB Compass untuk melihat data
Anda boleh lihat maklumat Xiao Ming tidak lagi wujud
Ringkasan
- Setakat ini kami ada selesai menggunakannya dalam
Nest.js
Mongoose operasi asas padaMongoDB
data. Dan selesai menggunakan penghias untuk membuat model dataSchema
dalam Nest. - Melihat dokumentasi, nampaknya anda juga boleh menggunakan TypeORM terbina dalam dalam Nest untuk membuat model. Rakan yang berminat boleh melihat. Apabila saya kembali untuk mempelajari sambungan pangkalan data lain, saya akan membacanya dan melihat cara mengendalikannya.
- Masih banyak yang perlu dipelajari tentang Nest, seperti saluran paip, perisian tengah, pemintas, pengawal laluan, dll. Saya bercadang untuk menggunakan ini dalam menulis demo kecil untuk mendalami pemahaman peribadi saya hanya membaca dokumentasi. Difahamkan, saya tidak akan pergi ke butiran di sini~ Apa yang saya tahu setakat ini adalah sangat berguna untuk menggunakan saluran paip untuk menentukan jenis permintaan hhh Rakan-rakan yang berminat boleh belajar tentang Pengesah Kelas
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!
Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menggunakan Nest.js untuk menyambung ke pangkalan data MongoDB dalam nod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Penggunaan utama JavaScript dalam pembangunan web termasuk interaksi klien, pengesahan bentuk dan komunikasi tak segerak. 1) kemas kini kandungan dinamik dan interaksi pengguna melalui operasi DOM; 2) pengesahan pelanggan dijalankan sebelum pengguna mengemukakan data untuk meningkatkan pengalaman pengguna; 3) Komunikasi yang tidak bersesuaian dengan pelayan dicapai melalui teknologi Ajax.

Memahami bagaimana enjin JavaScript berfungsi secara dalaman adalah penting kepada pemaju kerana ia membantu menulis kod yang lebih cekap dan memahami kesesakan prestasi dan strategi pengoptimuman. 1) aliran kerja enjin termasuk tiga peringkat: parsing, penyusun dan pelaksanaan; 2) Semasa proses pelaksanaan, enjin akan melakukan pengoptimuman dinamik, seperti cache dalam talian dan kelas tersembunyi; 3) Amalan terbaik termasuk mengelakkan pembolehubah global, mengoptimumkan gelung, menggunakan const dan membiarkan, dan mengelakkan penggunaan penutupan yang berlebihan.

Python lebih sesuai untuk pemula, dengan lengkung pembelajaran yang lancar dan sintaks ringkas; JavaScript sesuai untuk pembangunan front-end, dengan lengkung pembelajaran yang curam dan sintaks yang fleksibel. 1. Sintaks Python adalah intuitif dan sesuai untuk sains data dan pembangunan back-end. 2. JavaScript adalah fleksibel dan digunakan secara meluas dalam pengaturcaraan depan dan pelayan.

Python dan JavaScript mempunyai kelebihan dan kekurangan mereka sendiri dari segi komuniti, perpustakaan dan sumber. 1) Komuniti Python mesra dan sesuai untuk pemula, tetapi sumber pembangunan depan tidak kaya dengan JavaScript. 2) Python berkuasa dalam bidang sains data dan perpustakaan pembelajaran mesin, sementara JavaScript lebih baik dalam perpustakaan pembangunan dan kerangka pembangunan depan. 3) Kedua -duanya mempunyai sumber pembelajaran yang kaya, tetapi Python sesuai untuk memulakan dengan dokumen rasmi, sementara JavaScript lebih baik dengan MDNWebDocs. Pilihan harus berdasarkan keperluan projek dan kepentingan peribadi.

Peralihan dari C/C ke JavaScript memerlukan menyesuaikan diri dengan menaip dinamik, pengumpulan sampah dan pengaturcaraan asynchronous. 1) C/C adalah bahasa yang ditaip secara statik yang memerlukan pengurusan memori manual, manakala JavaScript ditaip secara dinamik dan pengumpulan sampah diproses secara automatik. 2) C/C perlu dikumpulkan ke dalam kod mesin, manakala JavaScript adalah bahasa yang ditafsirkan. 3) JavaScript memperkenalkan konsep seperti penutupan, rantaian prototaip dan janji, yang meningkatkan keupayaan pengaturcaraan fleksibiliti dan asynchronous.

Enjin JavaScript yang berbeza mempunyai kesan yang berbeza apabila menguraikan dan melaksanakan kod JavaScript, kerana prinsip pelaksanaan dan strategi pengoptimuman setiap enjin berbeza. 1. Analisis leksikal: Menukar kod sumber ke dalam unit leksikal. 2. Analisis Tatabahasa: Menjana pokok sintaks abstrak. 3. Pengoptimuman dan Penyusunan: Menjana kod mesin melalui pengkompil JIT. 4. Jalankan: Jalankan kod mesin. Enjin V8 mengoptimumkan melalui kompilasi segera dan kelas tersembunyi, Spidermonkey menggunakan sistem kesimpulan jenis, menghasilkan prestasi prestasi yang berbeza pada kod yang sama.

Aplikasi JavaScript di dunia nyata termasuk pengaturcaraan sisi pelayan, pembangunan aplikasi mudah alih dan Internet of Things Control: 1. Pengaturcaraan sisi pelayan direalisasikan melalui node.js, sesuai untuk pemprosesan permintaan serentak yang tinggi. 2. Pembangunan aplikasi mudah alih dijalankan melalui reaktnatif dan menyokong penggunaan silang platform. 3. Digunakan untuk kawalan peranti IoT melalui Perpustakaan Johnny-Five, sesuai untuk interaksi perkakasan.

Saya membina aplikasi SaaS multi-penyewa berfungsi (aplikasi edTech) dengan alat teknologi harian anda dan anda boleh melakukan perkara yang sama. Pertama, apakah aplikasi SaaS multi-penyewa? Aplikasi SaaS Multi-penyewa membolehkan anda melayani beberapa pelanggan dari Sing


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

Dreamweaver Mac版
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)