继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Nest.js基础知识之模块控制器

慕神8447489
关注TA
已关注
手记 1310
粉丝 174
获赞 957

简单介绍

用于构建高效且可伸缩Web应用程序的渐进式 Node.js 框架。完美支持 Typescript,面向 AOP 编程,支持 typeorm,Node.js 版的 spring,快速构建微服务应用。

我们要用Nest 首先是要安装一个 Nest-cli ,类似你用Vue做单应用要安装一个Vue-cli,使用egg要安装一个egg-cli 一样

在安装nest-cli 之前 我是建议大家先安装一个cnpm 或者 yarn , pnpm 的话安装nest-cli是有东西缺漏无法运行的。

npm install -g cnpm
cnpm install -g @nestjs/clicd /d F:
mkdir nestPro1 
nest new nestPro1 ./ #nest new [name] [dir]

如果你安装了yarn的话,可以选择yarn继续安装,如果你没有安装yarn的话,直接Ctrl + C不用给它面子。

cd nestPro1 
cnpm install

如果你是用pnpm的话,你会缺乏path-to-regexp这个模块包你需要再安装一个

pnpm install path-to-regexp --save-dev

安装完成后只要运行npm run start:dev就能进入开发模式
我们在项目的src文件中可以看到

src├── app.controller.ts├── app.module.ts└── main.ts

我们看一下main.ts文件,它负责引导我们的应用程序
我们看打

webp

image.png


你除了传递module外,还可以传递其他的参数
如果你在传递options的配置参数的话会在创建express应用的时候帮你也顺便配置上

webp

image.png


一般配置项目以express为基准


模块

Nest.js 最核心的东西不是 什么路由 控制器 ,而是模块,他和其他系统框架的模块不一样,和Tp5 Yii2那些模块不一样,Yii2的模块是使用到ClassMap来管理的,但是Nest.js模块使用来做注册、依赖使用的。
如果你没有这个模块,也就没有你的控制器和你在控制器中依赖注入的Service
然而这里的模块也就四大要素

controllers:[] //很清楚 是用来管理你的控制器的啦providers:[]  //很清楚 是这个模块私有使用的东西exports:[]  //是把模块的某个 东西公开出去 类似 node 中的 export 可是一般没什么用 除非你的数据库使用单独一个模块管理imports:[] //你需要依赖那个模块 依赖的模块要在这个模块使用时 一定要定义 exports

官方例子


webp

image.png

控制器

为了创建一个基本的控制器,我们必须使用装饰器。多亏了他们,Nest 知道如何将控制器映射到相应的路由。
所以你在使用Nest.js就不用和其他框架一样烦躁的在路由文件和控制器文件里切来切去。

如果我们把官方的例子中

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

@Controller('admin')export class AppController {  constructor(private readonly appService: AppService) {}
  @Get('index')
  root(): string {    return this.appService.root();
  }
}

那你现在访问的路径就是localhost:3000/admin/index

如果你想说用什么前缀的话,你是用一个控制器来做前缀控制器。
创建一个文件 prefix.enum.ts

const prefix = 'admin';export default {    CmsIndex: prefix,    AdminCmsCategroies: prefix
};

你的控制器可以改为

import { Get, Controller } from '@nestjs/common';import { AppService } from './app.service';import prefixEnum from './prefix.enum';

@Controller(prefixEnum.AdminCmsCategroies)export class AppController {  constructor(private readonly appService: AppService) {

  }

  @Get('index')
  root(): string {    console.log(this.appService);    return this.appService.root();
  }
}

这样你依然是localhost:3000/admin/index
当然Nest也提供了很多http请求方式有POST,PUT,DELTE这些常用的

下面要说说的是Param的使用了

  @Get('list:id/:google')  async list(@Param() params) {    return { params };
  }

这样的话你的路由地址就会变成localhost:3000/list3000/百度
注意Param只能使用在控制器中
这时候你应该获取到 参数就为

{ id : 3000 , google : '百度' }

如果你这时候你的url地址为 localhost:3000/list3000/百度?google=谷歌
你这时候就要引用@Query()修饰器

  @Get('list:id/:google')
  async list(@Param() params,@Query() query) {    return { query};
  }

此时你获取到的参数就是 { google : '谷歌' }



作者:傻梦兽
链接:https://www.jianshu.com/p/c8ac196bdaf3


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP