Nestjs框架快速入门:安装与启动

Nestjs框架快速入门:安装与启动

Nest 是构建高效可扩展的 Node.js Web 应用程序的框架。

Nest 默认使用JavaScript的超集TypeScript进行开发。

环境准备

查看node和npm版本:

$ node --version
v10.11.0
$ npm --version
6.9.0

安装@nestjs/cli

使用npm全局安装@nestjs/cli:

$ npm i -g @nestjs/cli
/usr/local/bin/nest -> /usr/local/lib/node_modules/@nestjs/cli/bin/nest.js
+ @nestjs/cli@6.3.0
added 60 packages from 29 contributors, 
 removed 10 packages, 
 updated 119 packages 
 and moved 1 package in 102.136s

使用nest --version命令查看nest当前版本:

$ nest --version
6.3.0

使用nest new命令创建一个名为 nest-quick-start 的项目:

$ nest new nest-quick-start    
We will scaffold your app in a few seconds..

CREATE /nest-quick-start/.prettierrc (51 bytes)
CREATE /nest-quick-start/README.md (3370 bytes)
CREATE /nest-quick-start/nest-cli.json (84 bytes)
CREATE /nest-quick-start/nodemon-debug.json (163 bytes)
CREATE /nest-quick-start/nodemon.json (132 bytes)
CREATE /nest-quick-start/package.json (1663 bytes)
CREATE /nest-quick-start/tsconfig.build.json (89 bytes)
CREATE /nest-quick-start/tsconfig.json (300 bytes)
CREATE /nest-quick-start/tslint.json (426 bytes)
CREATE /nest-quick-start/src/app.controller.spec.ts (617 bytes)
CREATE /nest-quick-start/src/app.controller.ts (274 bytes)
CREATE /nest-quick-start/src/app.module.ts (249 bytes)
CREATE /nest-quick-start/src/app.service.ts (142 bytes)
CREATE /nest-quick-start/src/main.ts (208 bytes)
CREATE /nest-quick-start/test/app.e2e-spec.ts (561 bytes)
CREATE /nest-quick-start/test/jest-e2e.json (183 bytes)
? Which package manager would you ❤️  to use? npm

✔ Installation in progress... ☕️
?  Successfully created project nest-quick-start
?  Get started with the following commands:
  $ cd nest-quick-start
  $ npm run start
    Thanks for installing Nest ?
 Please consider donating to our open collective
     to help us maintain this package.                       
?  Donate: https://opencollective.com/nest

启动项目

进入项目,并启动项目

$ cd nest-quick-start 
$ npm run start

> nest-quick-start@0.0.1 start /Users/cnwyt/development/nestjs/nest-quick-start
> ts-node -r tsconfig-paths/register src/main.ts

[Nest]28472 - 2019-05-02 15:45 [NestFactory] Starting Nest application...
[Nest]28472 - 2019-05-02 15:45 [InstanceLoader] AppModule dependencies initialized +15ms
[Nest]28472 - 2019-05-02 15:45 [RoutesResolver] AppController {/}: +7ms
[Nest]28472 - 2019-05-02 15:45 [RouterExplorer] Mapped {/, GET} route +4ms
[Nest]28472 - 2019-05-02 15:45 [NestApplication] Nest application successfully started +3ms

查看运行结果:

(1) 打开浏览器,访问 http://localhost:3000/ 就可以看到Hello World!页面输出了。

(2) 直接在终端查看,使用curl命令请求 localhost:3000,

$ curl localhost:3000
Hello World!% 

可以看到正常输出 Hello World!

项目结构

项目在哪里输出的Hello World!呢,我先看下项目的目录结构。

在终端,我们可以使用 tree 命令查看 nest-quick-start 的目录结构:

nest-quick-start
├── README.md
├── nest-cli.json
├── node_modules/
├── nodemon-debug.json
├── nodemon.json
├── package.json
├── src/
│    ├── app.controller.spec.ts
│    ├── app.controller.ts
│    ├── app.module.ts
│    ├── app.service.ts
│    └── main.ts
├── test/
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── tsconfig.build.json
├── tsconfig.json
├── tslint.json
└── yarn.lock

可以看到,和 Angular 项目的目录结构非常像。

项目的入口文件是 main.ts, 定义了一个异步方法(bootstrap)来启动应用,默认监听端口3000:

// src/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();

再看控制器: app.controller.ts

// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {
  }

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

控制器文件src/app.controller.ts中定义了一个getHello方法,使用@Get()进行路由注解。
getHello方法中,调用了 appService 中的getHello方法,因此返回了我上边输出的 Hello World! 字符串。

// app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

写一个获取当前接口版本的方法

现在,我们来自定义一个返回当前版本的接口,获取当前应用的版本:

在控制器 app.controller.ts 新增getVersion方法,使用 @Get('/version') 路由注解,表示访问 ‘/version’ 会调用该方法。修改后代码如下:

// src/app.controller.ts
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {
  }

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
  // 自定义 getVersion 方法: 
  @Get('/version')
  getVersion(): Object {
    return this.appService.getVersion();
  }
}

在服务类 app.service.ts 中新增 getVersion 方法,用来返回内容,返回格式为 Object
修改后代码如下:

// app.service.ts
import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
  // 自定义:获取版本
  getVersion(): Object {
    return {
      code: 200, 
      msg: "",
      data: {
        version:"0.0.1"
      }, 
    }
  }
}

使用 Control+C 结束终端运行,这次我们使用 npm run start:dev 启动(项目文件有修复会自动重启):

$ npm run start:dev

> nest-quick-start@0.0.1 start:dev /Users/cnwyt/development/nest-quick-start
> nodemon
[nodemon] 1.19.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: /Users/cnwyt/development/nest-quick-start/src/**/*
[nodemon] starting `ts-node -r tsconfig-paths/register src/main.ts`
[Nest]71200 - 2019-05-02 17:06 [NestFactory]Starting Nest application...
[Nest]71200 - 2019-05-02 17:06 [InstanceLoader]AppModule dependencies initialized +24ms
[Nest]71200 - 2019-05-02 17:06 [RoutesResolver]AppController {/}: +34ms
[Nest]71200 - 2019-05-02 17:06 [RouterExplorer]Mapped {/, GET} route +9ms
[Nest]71200 - 2019-05-02 17:06 [RouterExplorer]Mapped {/, GET} route +2ms
[Nest]71200 - 2019-05-02 17:06 [NestApplication]Nest application successfully started +5ms
 ... 

访问 http://localhost:3000/version, 输出json字符串内容:

{
    "code": 200,
    "msg": "",
    "data": {
        "version": "0.0.1"
    }
}

如果输错地址,框架会有如下404提示:

{
  "statusCode": 404,
  "error": "Not Found",
  "message": "Cannot GET /version2"
}

参考链接

https://docs.nestjs.com/first-steps

感谢阅读,如有问题请留言。

更新记录

2018-12-18: 新增本文档,使用nestjs 5.7.1 版本。
2019-05-02: 修改内容,并更新 nestjs 至 6.3.0版本。

[END]

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Web后端技术

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值