专栏首页全栈修仙之路Nest系列教程之入门篇

Nest系列教程之入门篇

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 简介

Nest 是构建高效,可扩展的 Node.js Web 应用程序的框架。 它使用现代的 JavaScript 或 TypeScript(保留与纯 JavaScript 的兼容性),并结合 OOP(面向对象编程),FP(函数式编程)和 FRP(函数响应式编程)的元素。

在底层,Nest 使用了 Express,但也提供了与其他各种库的兼容,例如 Fastify,可以方便地使用各种可用的第三方插件。

Nest 设计哲学

近几年,由于 Node.js,JavaScript 已经成为 Web 前端和后端应用程序的「通用语言」,从而产生了像AngularReactVue 等令人耳目一新的项目,这些项目提高了开发人员的生产力,使得可以快速构建可测试的且可扩展的前端应用程序。 然而,在服务器端,虽然有很多优秀的库、helper 和 Node 工具,但是它们都没有有效地解决主要问题 - 架构。

Nest 旨在提供一个开箱即用的应用程序体系结构,允许轻松创建高度可测试,可扩展,松散耦合且易于维护的应用程序。

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! 信息。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 玩转 Angular 环境变量

    对于 “程序猿” 来说,在日常开发过程中,我们经常要与不同的开发环境打交道。在实际的项目的开发过程中,一般至少会有两个环境:开发环境和线上环境,这是很简单的情形...

    阿宝哥
  • TypeScript keyof 操作符

    TypeScript 允许我们遍历某种类型的属性,并通过 keyof 操作符提取其属性的名称。keyof 操作符是在 TypeScript 2.1 版本引入的,...

    阿宝哥
  • 一文读懂 MD5 算法

    消息摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名、数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密。消...

    阿宝哥
  • 企业感染恶意软件的处理建议

    企业网络感染恶意软件可能会造成关键信息系统或数据的破坏,直接威胁正常业务的运行。为了应对这样的情况,企业应该提前做好准备,构建恶意软件的检测和响应能力。

    FB客服
  • 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码&链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家

    数据派THU
  • 云容量管理和应用

    几十年来,容量管理一直用于优化组织内部资源。现在,随着IT逐步转向云环境,这种方法正在被扩展,以便在同一个地方和同一时间实现所有资源(包括云计算和本地部署)的整...

    静一
  • Hive 内表与外表的区别

    ②创建外部表多了external关键字说明以及location ‘/home/wyp/external’

    week
  • 五步轻松实施Docker容器技术

    随着Docker在云计算市场中领先地位的日益稳固,容器技术也成为了一种主流技术。为了对用户的应用程序使用容器技术,可遵循以下五个步骤。 Docker容器技术已在...

    静一
  • MySql获取所有表名

    如何获取MySql中所有表的的表名?  sql语句是:show tables 返回结果如下: ? 不仅仅返回了所有的表名,更返回了视图的名字。

    码农阿宇
  • 转行程序员,如何高效率地学习编程

    想转行成为一名程序员,如何高效率地学习编程?互联网行业的迅速发展,让越来越多的人开始走进计算机行业,并从事相关的工作。

    一墨编程学习

扫码关注云+社区

领取腾讯云代金券