Nestjs中没有单独配置路由的地方。定义好控制器后nestjs会自动给我们配置对应的路由。
控制器的目的是接收应用的特定请求。路由机制控制哪个控制器接收哪些请求。通常,每个控制器有多个路由,不同的路由可以执行不同的操作。
nest g controller article
表示创建article的控制器,这个时候会在src目录下面生成一个article的文件夹,这个里面就是article的控制器,代码如下
import { Controller } from '@nestjs/common';
@Controller('article')
export class ArticleController {
}
创建好控制器后,nestjs会自动的在 app.module.ts 中引入ArticleController,代码如下:
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { ArticleController } from './article/article.controller' @Module({ imports: [ ], controllers: [AppController, ArticleController], providers: [AppService], }) export class AppModule {}
如果我们要访问控制器中的方法就需要配置路由
下面代码定义了一个新闻控制器。装饰器为@Controller('article'),装饰器参数里面的'article'就是我们的路由。
如果我们要返回index方法里面的内容我们在浏览器输入 http://localhost:3000/article
如果我们要返回add方法里面的内容我们在浏览器输入 http://localhost:3000/article/add
import { Controller, Get } from '@nestjs/common'; @Controller('article') export class ArticleController { @Get() index(): string { return ‘这是article里面的index’; } @Get(‘add’) add(): string { return ‘这是article里面的Add’; } }
关于nest的return: 当请求处理程序返回 JavaScript 对象或数组时,它将自动序列化为 JSON。但是,当它返回一个字符串时,Nest 将只发送一个字符串而不是序列化它。这使响应处理变得简单:只需要返回值,Nest 负责其余部分。
Nestjs也提供了其他HTTP请求方法的装饰器 @Put() 、 @Delete()、 @Patch()、 @Options()、 @Head()和 @All()
在Nestjs中获取Get传值或者Post提交的数据的话我们可以使用Nestjs中的装饰器来获取。
@Request() req @Response() res @Next() next @Session() req.session @Param(key?: string) req.params / req.params[key] @Body(key?: string) req.body / req.body[key] @Query(key?: string) req.query / req.query[key] @Headers(name?: string) req.headers / req.headers[name]实例代码:
import { Controller, Get, Post } from '@nestjs/common'; @Controller('news') export class NewsController { @Get() getAbout(@Query() query):string { console.log(query); //这里获取的就是所有的Get传值 return '这是about' } @Get(‘list’) getNews(@Query(‘id’) query):string { console.log(query); //这里获取的就是Get传值里面的Id的值 return '这是新闻' } @Post('doAdd') async addNews(@Body() newsData){ console.log(newsData); return ‘增加新闻’ } }