NestJS入门教程— 04.Controller/路由的创建

1,236 阅读3分钟

| 04.Controller/路由的创建 <--点击…

上一节介绍目录的时候我说过/src/app.controller.ts 是控制器,其实也就是编写路由。

新建一个路由/Controller

比如要新建一个http://localhost:3000/jspang的页面,访问时直接返回Hello NestJS,这时候就可以在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();
  }
 //---------添加部分-----------
  @Get('JSpang')
  getJSpang():string{
    return 'Hello NestJS.'
  }
 //---------------------------
}

编写完成后,就可以来到浏览器访问http://localhost:3000/jspang ,这时候你就可以看到你想要的结果了。

增加一个顶层路径

比如现在要在所有的路由前面加一个api的顶层路径,例如所有的路径形式变成http://localhost:3000/api/xxxxx 这个时候要如何编写那?其实方法也很简单,就是在最上层的@Controller( )加入一个api的字符串就可以了。

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

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

这时候再次访问路径就变成了http://localhost:3000/api

创建一个模块和路由

上面这个路由是用NestJS CLI 自动给我们生成的,只是作一个参考,让我们可以看到一个页面。我们真实项目一般不是这样的,都是一个页面或者一个大的模块建立一个文件夹。在这个文件夹里有不同的controller、service和module。下面我就模拟真实中的开发,给大家创建一个Girl的模块,来讲述Controller的设置。

首先删除自动生成的测试文件app.controller.spec.ts、控制文件app.controller.tsapp.service.ts都删除掉。

然后进入到app.modlue.ts文件中,把刚才删除内容的引用,再次删除掉,删除后的文件如下。

删除前的app.module.ts文件

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

删除后的app.module.ts文件

import { Module } from '@nestjs/common';

@Module({
  imports: [],
  controllers: [],
  providers: [],
})
export class AppModule {}

当删除都完成后,我们就可以新建模块了。NestJS 鼓励使用终端的形式新建模块,打开终端[Ctrl+Shift+`]。输入下面的命令,新建一个模块。

nest g module girl

稍等一会,在/src目录下,就自动建立了一个girl的文件夹,在文件夹里还自动生成了girl.module.ts的。

再返回/src目录,可以看到在app.module.ts文件里,给我们自动引入了刚刚创建的模块。

import { Module } from '@nestjs/common';
import { GirlModule } from './girl/girl.module';

@Module({
  imports: [GirlModule],
  controllers: [],
  providers: [],
})
export class AppModule {}

也就是说,我们用这种命令行创建的文件,NestJS CLI会自动为我们进行导入,比如现在我们再创建一个controller.

nest g controller girl --no-spec 

稍等一会,它自动为我们在/src/girl目录下,创建了girl.controller.ts文件。有了这个文件以后,我们就可以在这个文件里创建路由了。编写下面的代码:

import { Controller, Get } from '@nestjs/common';

@Controller('girl')
export class GirlController {

  @Get()
  getGirls():any{
    return{
      code:0,
      data:['翠花','小红','大丫'],
      msg:'请求女孩列表成功'
    }
  }
}

编写完成后,在浏览器中打开http://localhost:3000/girl 就可以看到返回的信息了。 我们真实的开发更倾向于这种模式。

在main.ts设置默认前缀

这时候想在所有的请求加入前缀/honglangman,就可以到/src/main.ts里,编写下面的代码。

app.setGlobalPrefix('HongLangMan');

这时候的访问地址就变成了http://localhost:3000/honglangman/girl

好了,这节文章就到这里,我相信学完后你对NestJS里Controller的创建已经有了新的了解。下节课我们学习一下如何创建一个Service,然后如何在Service里编写业务逻辑。