Nest 用于构建高效且可扩展的服务器端应用程序的渐进式 Node.js 框架,深受 Angular 的启发。
Talk is cheap. Show me the code.
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';
@Injectable()
export class CatsService {
private readonly cats: Cat[] = [];
create(cat: Cat) {
this.cats.push(cat);
}
findAll(): Cat[] {
return this.cats;
}
}
以上的代码对于 Angular 的小伙伴来说,是不是感觉很熟悉。除了代码层相似之外,系统模块架构也类似:
下面我们步入正题,迈出 Nest 大门的第一步。
Nest 是构建高效,可扩展的 Node.js Web 应用程序的框架。 它使用现代的 JavaScript 或 TypeScript(保留与纯 JavaScript 的兼容性),并结合 OOP(面向对象编程),FP(函数式编程)和 FRP(函数响应式编程)的元素。
在底层,Nest 使用了 Express,但也提供了与其他各种库的兼容,例如 Fastify,可以方便地使用各种可用的第三方插件。
近几年,由于 Node.js,JavaScript 已经成为 Web 前端和后端应用程序的「通用语言」,从而产生了像Angular、React、Vue 等令人耳目一新的项目,这些项目提高了开发人员的生产力,使得可以快速构建可测试的且可扩展的前端应用程序。 然而,在服务器端,虽然有很多优秀的库、helper 和 Node 工具,但是它们都没有有效地解决主要问题 - 架构。
Nest 旨在提供一个开箱即用的应用程序体系结构,允许轻松创建高度可测试,可扩展,松散耦合且易于维护的应用程序。
与使用 Angular CLI 搭建 Angular 开发环境一样,Nest 也为我们提供了 Nest CLI。对于新用户来说,你可以在命令执行以下命令安装 Nest CLI:
$ npm i -g @nestjs/cli
安装完成后,我们继续执行以下命令来新建项目:
$ nest new nest-quickstart
新建项目的目录结构如下:
├── README.md
├── node_modules
├── nodemon-debug.json
├── nodemon.json
├── package-lock.json
├── package.json
├── src
├── test
├── tsconfig.json
├── tsconfig.spec.json
├── tslint.json
└── webpack.config.js
其中 src 是源码目录,该目录下有以下几个核心文件:
├── app.controller.ts # 根控制器
├── app.module.ts # 应用程序根模块
├── app.service.ts # 根服务
└── main.ts # 应用程序入口文件
其中 main.ts 的代码如下,它负责引导我们的应用程序:
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
bootstrap 方法是一个异步函数,在该函数内部,通过调用 NestFactory.create
方法创建一个 Nest 应用实例,然后开始监听 3000
端口。
在项目依赖安装完成后,可以运行以下命令启动应用:
$ npm run start
以上命令成功运行后,我们打开浏览器并访问 http://localhost:3000/
,这时你将在浏览器看到 Hello World!
信息。