大家好!今天我们将介绍如何使用最新版本的NestJS 10和强大的MongoDB数据库(通过Mongoose)来创建一个完整的CRUD API。如果您对Node.js和后端开发有着浓厚的兴趣,那么本文将为您带来无限的喜悦!
在当今数字化时代,API是构建现代应用程序的关键组成部分。NestJS是一个基于Node.js的框架,可以帮助我们高效地开发可扩展和模块化的后端应用程序。而MongoDB作为一种流行的非关系型数据库,提供了快速、灵活且可扩展的存储解决方案。
首先,让我们对NestJS做一些简单而迷人的介绍。NestJS借鉴了Angular的许多概念,提供了一种优雅且可维护的方式来构建服务器端应用程序。它使用TypeScript作为主要开发语言,并提供了一种基于依赖注入和装饰器的开发风格。
好了,现在让我们开始构建我们的CRUD API。首先,我们需要安装NestJS CLI,这是一种命令行工具,可以帮助我们快速启动和生成NestJS项目。使用以下命令进行安装:
“`
npm install -g @nestjs/cli
“`
一旦安装完成,我们就可以使用以下命令创建一个新的NestJS项目:
“`
nest new nest-mongodb-crud-api
“`
创建项目之后,我们需要安装一些必要的依赖库。我们将使用Mongoose作为MongoDB的对象建模工具。运行以下命令以安装所需的依赖项:
“`
cd nest-mongodb-crud-api
npm install mongoose @nestjs/mongoose
“`
一旦安装完成,我们需要为Mongoose配置连接字符串。打开src/app.module.ts,并添加以下代码:
“`typescript
import { Module } from ‘@nestjs/common’;
import { MongooseModule } from ‘@nestjs/mongoose’;
@Module({
imports: [
MongooseModule.forRoot(‘mongodb://localhost/nest-mongodb-crud-api’),
],
})
export class AppModule {}
“`
现在,我们已经连接到数据库,接下来让我们开始创建我们的第一个模型。
在src目录下创建一个新文件夹`src/models`,然后在文件夹中创建一个`user.model.ts`文件。添加以下代码:
“`typescript
import { Schema, Document } from ‘mongoose’;
export interface User extends Document {
name: string;
age: number;
}
export const UserSchema = new Schema({
name: String,
age: Number,
});
“`
我们的用户模型很简单,只有一个名称和年龄字段。现在我们需要为模型创建一个服务,并实现一些基本的CRUD操作。
在`src`文件夹中创建一个名为`users`的新文件夹,并在该文件夹中创建一个`users.service.ts`文件。添加以下代码:
“`typescript
import { Injectable } from ‘@nestjs/common’;
import { InjectModel } from ‘@nestjs/mongoose’;
import { Model } from ‘mongoose’;
import { User } from ‘../models/user.model’;
@Injectable()
export class UsersService {
constructor(
@InjectModel(‘User’) private readonly userModel: Model
) {}
async findAll(): Promise
return this.userModel.find().exec();
}
async findById(id: string): Promise
return this.userModel.findById(id).exec();
}
async create(user: User): Promise
const newUser = new this.userModel(user);
return newUser.save();
}
async update(id: string, user: User): Promise
return this.userModel.findByIdAndUpdate(id, user, { new: true }).exec();
}
async delete(id: string): Promise
return this.userModel.findByIdAndRemove(id).exec();
}
}
“`
现在,我们只需要创建一个具体的控制器来处理来自客户端的请求,并调用相应的服务方法。
在`src/users`文件夹中创建一个`users.controller.ts`文件,并添加以下代码:
“`typescript
import { Controller, Get, Post, Put, Delete, Param, Body } from ‘@nestjs/common’;
import { UsersService } from ‘../services/users.service’;
import { User } from ‘../models/user.model’;
@Controller(‘users’)
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get()
async findAll(): Promise
return this.usersService.findAll();
}
@Get(‘:id’)
async findById(@Param(‘id’) id: string): Promise
return this.usersService.findById(id);
}
@Post()
async create(@Body() user: User): Promise
return this.usersService.create(user);
}
@Put(‘:id’)
async update(@Param(‘id’) id: string, @Body() user: User): Promise
return this.usersService.update(id, user);
}
@Delete(‘:id’)
async delete(@Param(‘id’) id: string): Promise
return this.usersService.delete(id);
}
}
“`
现在,我们已经创建了我们的控制器和服务,让我们将它们导出并将其添加到根模块中。
在`src/app.module.ts`中,添加以下代码:
“`typescript
import { Module } from ‘@nestjs/common’;
import { MongooseModule } from ‘@nestjs/mongoose’;
import { UsersModule } from ‘./users/users.module’;
@Module({
imports: [
MongooseModule.forRoot(‘mongodb://localhost/nest-mongodb-crud-api’),
UsersModule,
],
})
export class AppModule {}
“`
最后,我们需要在根模块中添加一个`users.module.ts`文件:
“`typescript
import { Module } from ‘@nestjs/common’;
import { MongooseModule } from ‘@nestjs/mongoose’;
import { UsersService } from ‘./services/users.service’;
import { UsersController } from ‘./controllers/users.controller’;
import { UserSchema } from ‘./models/user.model’;
@Module({
imports: [
MongooseModule.forFeature([{ name: ‘User’, schema: UserSchema }]),
],
providers: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
“`
现在,我们已经完成了CRUD API的构建过程!您可以尝试使用Postman或Curl来测试API的各个端点。
在本文中,我们了解了如何使用NestJS 10和MongoDB(通过Mongoose)从头开始构建一个完整的CRUD API。通过遵循这些步骤,您将能够创建强大、可扩展和模块化的后端应用程序。祝您在使用NestJS构建API时玩得开心!
参考链接:https://jsdev.space/nestjs-crud/
感谢阅读本文,希望对您有所帮助!
了解更多有趣的事情:https://blog.ds3783.com/