
管理一个大规模的应用程序可能会很繁琐,尤其是在没有经过良好规划的结构和严格的代码组织策略下构建时。这可能会导致在维护过程中出现灾难,并应尽一切努力避免。这种灾难是由于随着项目用户基数的增长,对代码库的修改和新功能的引入所引起的。
另一方面,Nest.js旨在提供解决代码结构和代码组织策略问题的解决方案。它结合了现代化和模块化的软件工程原则。
Nest.js使用进行类型检查,并为构建和部署可测试、可扩展、松散耦合且易于维护的应用程序提供了一个开箱即用的软件架构。
在本文中,我们将探讨Nest.js及其可以构建的内容。我们还将解释该框架的优缺点,以便让您清楚为什么公司更喜欢它而不是其他Node.js框架。最后,我们将演示如何使用Nest.js创建一个待办事项API。
Nest.js是一种快速增长的,用于使用Node.js构建高效、可扩展和企业级的后端应用程序。它以使用现代和TypeScript产生高度可测试、可维护和可扩展的应用程序而闻名。

Nest.js官方标志(图片来源:)
在上拥有超过46.6k个星星和5.4k个Fork,并且每周下载量高达70万次,这个框架是使用Node.js构建后端项目的热门选择。
如果您需要构建可扩展、可维护、企业级的应用程序,Nest.js是您下一个项目的完美解决方案。
在下一节中,我们将探讨它的用途以及在生产中使用该框架的不同公司。
Nest.js是一个用于构建高度可测试和可维护后端应用程序的服务器端Node.js框架。您可以;唯一的限制在于应用程序的功能。
由于该框架利用了TypeScript,Nest.js在寻求发挥TypeScript类型检查能力的团队中特别受欢迎。而且,它易于学习和掌握,具有强大的CLI(命令行界面),可提高生产力和开发的便利性。这个强大的CLI使得快速启动任何服务器端项目并将其完成变得轻而易举。
此外,Nest.js提供了详细的文档,并且其开发者和贡献者社区非常活跃,愿意随时解决问题。
这些原因使得很多公司都倾向于切换到Nest.js框架。下面是一些在生产中使用该框架的知名品牌。
Roche是一家跨国医药公司,分为制药和诊断两个部门。这家美国生物科技公司在其主要网站上使用Nest.js框架,可靠地为患者提供服务并进一步扩大其业务。

Roche官方主页
阿迪达斯是欧洲更大的运动服装制造商,全球排名第二。阿迪达斯以设计和制造鞋类、服装和配饰而闻名。由于其全球覆盖范围和知名度,他们决定使用高度可扩展的Nest.js框架来构建品牌的大规模高效应用程序。

阿迪达斯官方主页
迪卡侬是在57个国家拥有超过1,500家门店的体育用品零售商。迪卡侬选择了Nest.js作为其 *** 应用程序的后端,以帮助他们扩展和维护现有的代码库。

迪卡侬官方主页
您可以在上找到使用Nest.js构建的其他公司、项目和工具的列表。
接下来,我们将讨论为什么您和您的公司应选择Nest.js作为下一个项目,并介绍为什么其他人已经使用该框架以及它的优势。
选择一个框架取决于您正在开发的应用程序类型,因为不同的应用程序需要不同的工具集。
在这里,我们将列举选择Nest.js作为您的Node.js框架来升级或构建下一个项目的不同原因。
接下来,我们将探讨Nest.js的优缺点。通过讨论好的和坏的方面,这将有助于巩固您采用该框架的决定。
在这里,我们将列举Nest.js的优缺点,以更好地了解为什么它在Node.js生态系统中如此受欢迎。
使用Nest.js的一些好处包括:
有句著名的名言:“每个优势都有其不足之处”——Nest.js也不例外。因此,让我们探讨一下Nest.js的缺点。
这就是Nest.js的优点和缺点,以及它们如何影响您选择它作为首选框架的决策制定过程。
接下来,我们将通过使用Nest.js构建一个RESTful API来巩固我们迄今为止学到的知识。继续阅读,了解如何开发一个待办事项API,允许用户创建和管理他们的待办事项列表。
是时候将我们学到的关于Nest.js的知识付诸实践,通过构建我们的之一个RESTful API来展示它的功能和简单性。
我们将从设置框架和开始,让它能够运行起来。
首先,我们使用以下命令安装Nest CLI以创建新项目:
npm i -g @nestjs/cli
之后,使用以下命令创建一个新项目:
nest new nest-todo-api cd nest-todo-api npm run start:dev
现在,我们已经安装了Nest CLI并成功创建了新项目,让我们构建我们的API。
在你选择的任何代码编辑器中打开这个项目。如果你访问 localhost:3000,你应该会看到一个欢迎信息,显示一切都成功运行。
接下来,我们将设置一个来连接和管理项目中的待办事项数据。
在深入之前,让我们使用以下命令生成我们创建API所需的所有文件:
nest generate module todos nest generate controller todos nest generate service todos
接下来,我们将安装并配置以与之前创建的项目一起工作。
在本地计算机上安装MongoDB后,运行以下命令来在我们新创建的项目中安装Mongoose库:
npm install --save @nestjs/mongoose mongoose
这就是你需要做的。
接下来,我们将生成文件并将Mongoose引入项目和MongoDB进行通信。
在生成其他必要文件之前,让我们将Mongoose引入我们的应用程序模块文件中。
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';
import { TodosModule } from './todos/todos.module';
@Module({
imports: [MongooseModule.forRoot('mongodb://localhost/todos), TodosModule],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
接下来,我们将为我们的数据库构建数据库模式。这个模式将指定数据在我们的数据库中的表示方式。
让我们在我们的todos.schema.ts文件中定义它:
import * as mongoose from 'mongoose';
export const ItemSchema = new mongoose.Schema({
title: String,
is_completed: Boolean,
description: String,
});
接下来,我们将创建一个用于类型检查的接口。
让我们在我们的interfaces/todo.interface.ts文件中定义它:
import { Document } from 'mongoose';
export interface Item extends Document {
id?: string;
title: string;
description?: string;
is_completed: boolean;
}
最后,我们将构建一个DTO (数据传输对象),定义数据将如何在 *** 中的对象之间发送或传递。
它是一个基本类,具有和我们模式相同的属性:
// ./dto/create-todo.ts
export class CreateItemDto {
readonly title: string;
readonly description: string;
readonly is_completed: boolean;
}
服务文件负责与MongoDB数据库进行交互和通信。它用于在先前创建的 todos 模式中创建、检索、更新和删除记录。
打开你的服务文件并添加以下代码:
import { Injectable } from '@nestjs/common';
import { Todo } from './interfaces/todo.interface';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { CreateTodoDto } from './dto/create-todo.dto';
@Injectable()
export class ItemsService {
constructor(@InjectModel('Todo') private readonly todoModel: Model) {}
async findAll(): Promise<Todo[]> {
return await this.todoModel.find();
}
async findOne(id: string): Promise {
return await this.todoModel.findOne({ _id: id });
}
async create(item: CreateItemDto): Promise {
const newTodo = new this.todoModel(item);
return await newTodo.save();
}
async delete(id: string): Promise {
return await this.todoModel.findByIdAndRemove(id);
}
async update(id: string, todo: CreateTodoDto): Promise {
return await this.todoModel.findByIdAndUpdate(id, todo, { new: true });
}
}
上面的代码段使用在我们的API上表达了CRUD (创建、读取、更新、删除)应用程序,以便他们访问我们底层的MongoDB数据库。
接下来,我们将创建我们的控制器文件,用于处理所有逻辑和与我们上面创建的服务进行通信。
控制器负责处理传入的请求并向客户端发送响应。
让我们定义我们的 Todo 控制器并粘贴以下代码段:
import {
Controller,
Get,
Post,
Put,
Delete,
Body,
Param,
} from '@nestjs/common';
import { CreateTodoDto } from './dto/create-todo.dto';
import { TodosService } from './todos.service';
import { Todo } from './interfaces/todo.interface';
@Controller('items')
export class ItemsController {
constructor(private readonly todosService: TodosService) {}
@Get()
findAll(): Promise<Todo[]> {
return this.todosService.findAll();
}
@Get(':id')
findOne(@Param('id') id): Promise {
return this.todosService.findOne(id);
}
@Post()
create(@Body() createTodoDto: CreateTodoDto): Promise {
return this.todosService.create(createTodoDto);
}
@Delete(':id')
delete(@Param('id') id): Promise {
return this.todosService.delete(id);
}
@Put(':id')
update(@Body() updateTodoDto: CreateTodoDto, @Param('id') id): Promise {
return this.todosService.update(id, updateTodoDto);
}
}
该框架使用注解来处理很多后台功能,例如通过为RESTful API的Put、Delete、Post和Get分别提供不同的注解(@Put(), @Delete(), @Post(), @Get())来处理框架的路由系统。
最后,我们将使用Postman测试我们新创建的API。在部署到生产服务器之前,我们需要启动开发服务器以确保一切正常运行。
npm run start:dev
你可以来测试你的RESTful API。

Nest.js待办事项列表结果
Nest.js是一个强大的Node.js框架,也是目前更流行的TypeScript框架。
它为工程团队提供了标准的开发架构和行业。开发人员可以将重复的工程流程抽象出来,专注于开发业务逻辑。
正是这些优势促使Adidas、Roche等知名品牌选择在其企业生产应用程序中使用该框架。
在本文中,我们为Nest.js打下了坚实的基础,解释了为什么你和你的公司应该考虑转向它。此外,我们构建了一个简单的待办事项RESTful API来实际展示该框架的强大之处。
现在,你可以决定Nest.js是否适合你。
不久前,PHP 8.0大张旗鼓地发布了。它带来了许多新特性、性能增强和变化——其中最令人兴奋的是新的JIT编译器。 技术世界总是在向前发展,PHP也是如此。 ,包含了几个令人兴奋的特性。它定于今年晚些时候于2021年11月25日发布。 在本文中,我们将详细介绍PHP 8.1将带来哪些新的东...
谁在尝试访问某些网站时没有遇到过更新Java的请求? 虽然许多人通过交互式网站功能熟悉Java,但用户可能不太熟悉JavaScript——或者,实际上,他们可能错误地认为两者是相同的。 在本文中,我们将讨论JavaScript 是什么以及Java和JavaScript之间的区别。然后我们将概...
宝塔面板中的网站管理是非常重要的一部分,也是站长经常需要使用到的功能模块。网站管理,主要用于管理和创建WEB站点。如果您是宝塔面板的使用用户,应该对此模块有充分的了解,以便于您更高效地管理网站。 宝塔面板网站管理模块包括:添加新网站、修改默认页、设置默认站点、站点列表、站点的运行与停止、备份站点、...
宝塔面板的安全管理可以设置SSH开关、禁用PING、放行端口、屏蔽IP等相关的操作。 SSH的设置 SSH的关闭与启动,点击下图的开关,即可开启或关闭SSH远程连接。 SSH端口的修改,SSH远程连接的默认端口为22,修改端口前,请先查看该端口是否被占用。 PING命令的...
想成为一名网络开发人员或好奇工作的哪些子类型的薪水最高?Web开发是一个竞争激烈、多样化的行业,随着新语言和框架的出现而不断发展。 询问Web开发人员的薪水是一个难以解决的问题(尽管我们尝试)。有太多的因素需要考虑。 无论您是自由开发者还是有兴趣从事更传统的工作、喜欢前端或后端工作,或者想知...
PHP开发:有些人认为它是,另一些人认为它是一种过时的技术,不值得花时间学习。但是这些数字说明了什么,尤其是当您查看PHP开发人员的薪水时? 虽然肯定有许多更新、更炫、更令人兴奋的语言,但PHP仍然是后端Web开发的可靠主食,也是许多雇主仍在寻找的技能。 有兴趣自己成为PHP开发人员吗?我们...