Controller初阶

#使用脚手架搭建nest项目,学会controller的基础用法#

搭建项目

使用npm下载脚手架;

npm i -g @nestjs/cli

创建一个nest新项目;

nest new project-name

进入创建的文件夹,npm run start;能访问到localhost:3000则启动成功;

Npm run start

使用controller装饰器 

 创建一个控制器(类),如:user.controller.ts

// 如果想要使用命令创建,可以使用nest g controller user
import { 
    // 类装饰器
    Controller,
    // 方法装饰器 
    Get,HttpCode,Post,Header,Redirect,
    // 参数装饰器
    Req,Request,Param
    } from '@nestjs/common';
import {Request as ExpressRequest} from 'express';
//控制器装饰器定义一个基本的控制器,我们可以通过在装饰器钟使用路径前缀对路由进行分组
@Controller('user')
export class UserController{

    // 当我们使用Get()方法装饰器,我们可以在路由上定义一个get请求,这样他会和controller装饰器中定义的路径进行拼接 /user/get
    @Get('get')
    getUser():string{
        /**
         * 这里我们只是简单的返回一个字符串,因为会有状态码等响应:因为当返回值为一个基本类型时,nest内部会负责处理。
         * 如果我们使用@Res()或者@Next(),则需要手动设置响应;
         * 那如果我们只想修改响应的一部分,并不想完全自己设置,可以使用@Res({ passthrough: true }) 
         *  */ 
        return 'getUser'; 
    }

    // Request()请求参数装饰器,其中Request和Req是等效的
    @Get('request')
    // 这里我们可以给request,req两个方法参数添加类型,需要安装@types/express
    handleRequest(@Request() request:ExpressRequest,@Req() req:ExpressRequest):string{
        // 获取request的全部信息
        console.log("request",request);
        // 获取req的url
        console.log("req.url",req.url);
        return 'handleRequest';
    }

    // POST()方法装饰器
    @Post('post')
    handlePost():string{
        return 'handlePost';
    }
    /**
     * 在nest里面除了Get,Post提供了很多请求类型的装饰器
     * Put:用于更新资源,与post不同,Put是幂等的,即多次执行相同的操作,结果不变;
     * Delete:删除资源,也是幂等的;
     * Patch:更新资源,与Put不同,Patch是部分更新,即只更新资源的部分属性;
     * Options:通常用于获取目标资源所支持的通信选项。常用于跨域资源共享(CORS)场景;
     * Head:与 GET 类似,但不返回响应体。通常用于检查资源是否存在,而不获取其内容;
     * All:允许一个路由处理程序同时处理多种 HTTP 方法。这在某些中间件或通用逻辑中非常有用。
     */

    // 路由通配符 a*b
    @Get('a*b')
    handleWildCard(@Request() request:ExpressRequest):string{
        return 'wildcard' + request.url;
    }

    // 状态码,使用HttpCode装饰器设置状态码
    @Post('status')
    @HttpCode(204)
    handleHttpCode():string{
        return 'status';
    }


    // Header,指定自定义像响应头,可以添加多个
    @Post('header')
    @Header('key1','value1')
    @Header('key2','value2')
    handleHeader():string{
        return 'header';
    }

    // 重定向,将重新响应到指定的url,使用Redirect装饰器,它的两个参数(url,statusCode)
    @Get('redirect1')
    @Redirect('get',301)
    handleRedirect():void{
        console.log('handleRedirect');
        // return 'redirect';
    }

    // 当然也可以动态传递路由,在返回值{url:url,statusCode:statusCode}可以覆盖Redirect参数,但是必需要Redirect装饰器
    @Get('redirect2')
    @Redirect('get',301)
    handleRedirect2(@Request() request:ExpressRequest):any{
        console.log('handleRedirect2');
        // return 'redirect';
        // 这里的url是动态的,可以动态获取
        const url = "https://www.baidu.com";
        // 这里的statusCode是动态的,可以动态获取
        const statusCode = 301;
        // 这里的redirectUrl是动态的,可以动态获取
       const redirectUrl = 'get';
       return {url:url,statusCode:statusCode}
    }

    // 获取路由参数
    @Get('param/:id')
    handleParam(@Param() params,@Param('id') id):string{
        console.log('params',params);
        return `id:${params.id}-----${id}`
    }

 
}

在模块内的装饰里注册控制器

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { UserController } from './user.controller';
// import { AdminController } from './admin.controller';
import { AppService } from './app.service';
import { UserService } from './user.service';

import { BookController } from './book.controller';

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值