美文网首页Node.js我爱编程NodeJs
Nest.js基础知识之模块控制器

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

作者: 茶艺瑶 | 来源:发表于2018-08-07 19:48 被阅读19次

    简单介绍

    用于构建高效且可伸缩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/cli
    cd /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文件,它负责引导我们的应用程序
    我们看打

    image.png
    你除了传递module外,还可以传递其他的参数
    如果你在传递options的配置参数的话会在创建express应用的时候帮你也顺便配置上
    image.png
    一般配置项目以express为基准

    模块

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

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

    官方例子


    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 : '谷歌' }

    基本功 控制器已经介绍完毕
    下一篇就会讲讲 mongodb + mongoose 的操作

    相关文章

      网友评论

        本文标题:Nest.js基础知识之模块控制器

        本文链接:https://www.haomeiwen.com/subject/eoyavftx.html