学习nest.js的第二天

main.js

应用程序入口文件。它使用 NestFactory 用来创建 Nest 应用实例。

create()方法:从下图可以看出,create有两个,一个接受根模块和可选配置对象,另一个则接受根模块、代理请求/响应周期的适配器、可选的配置对象

拓展:

方法重载:定义的两个方法重名,那么只要形参的个数或者类型不一致,那么就会被认为是两个不同的函数,根据不同的参数类型或个数来调用合适的方法,提高代码的复用性和灵活性,非弱类型的语言均可这么定义

强类型语言:强类型语言是一种强制类型定义的语言,一旦某一个变量被定义类型,如果不经过强制转换,则它永远就是该数据类型了,强类型语言包括Java、.net 、Python、C++、typeScript等语言

弱类型语言:弱类型语言是一种弱类型定义的语言,某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过显性强制转换。弱类型语言包括vb 、PHP、javascript等语言。

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
​
async function bootstrap() {
  // 默认使用express平台
  const app = await NestFactory.create(AppModule);
  //访问的端口号
  await app.listen(3000);
}
bootstrap();

如果想要切换成fastify平台,先安装fastify驱动

npm install fastify @nestjs/platform-fastify && npm uninstall @nestjs/platform-express @types/express

然后将main.js改成如下

import { NestFactory } from '@nestjs/core';
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
​
import { AppModule } from './app.module';
​
async function bootstrap() {
    // 使用fastify驱动
    const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter(), {
        // 启用跨域访问
        cors: true,
        // 只使用error和warn这两种输出,避免在控制台冗余输出
        logger: ['error', 'warn'],
    });
    // 设置全局访问前缀
    app.setGlobalPrefix('api');
    //访问的端口号
    await app.listen(3000,()=>{
        // 启动后的输出
        console.log('访问路径为:http://localhost:3000/api');
    });
}
bootstrap();

关于create的options参数

   
 //跨域配置。可以设置true默认跨域,也可以设置CorsOptions对象,配置详细的CORS选项,例如允许共享本资源的Origin、允许的HTTP方法、允许请求携带哪些头部信息等等
    cors?: boolean | CorsOptions | CorsOptionsDelegate<any> 
    //是否使用底层平台的body解析器,
    bodyParser?: boolean 
    //配置HTTPS服务器的选项。可以设置为HttpsOptions对象,包含有关SSL证书、私钥等的详细信息。
    httpsOptions?: HttpsOptions
    //是否在请求上注册原始请求体。使用“req.rawBody”
    rawBody?: boolean;
    //强制关闭打开的HTTP连接
    forceCloseConnections?: boolean;
    //指定自定义的日志记录器,用于记录应用程序的日志。
    logger?: LoggerService | LogLevel[] | false;
    //它决定了当在启动过程中发生错误时是否要终止应用程序的启动。如果 abortOnError 设置为 true(默认值为 false),当发生错误时,Nest.js 会立即终止应用程序的启动,并输出错误信息。如果 abortOnError 设置为 false,则会继续启动应用程序,但会打印出错误信息。
    abortOnError?: boolean | undefined;
    //如果启用,日志将被缓冲,直到“Logger#flush”方法被调用。
    bufferLogs?: boolean;
    //如果启用,日志将自动刷新,并在应用程序初始化过程完成或失败
    autoFlushLogs?: boolean;
    //是否以预览模式运行应用程序。在预览模式下,提供商/控制器不会被实例化和解析。
    preview?: boolean;
    //是否生成序列化的图快照。
    snapshot?: boolean;

改好了平台和配置就可以启动项目了

npm run start 如果需要热更新 npm run start:dev

在浏览器中访问locahost:3000,当然如果你在main.js中改了app.listen的端口号的话。那就是你改的端口号,就会看见'Hello World!',这个'Hello World!'就是你在app.controller.ts定义的Get请求的getHello方法中this.appService.getHello()返回的字符串

@Controller控制器,可以理解为路由,@Controller('路由路径') 代表访问这个控制器下的所有接口都要加上/路由路径

生成命令

可以通过nest --help查看nest命令列表

nest --help
      │ name          │ alias       │ description                                  │
      │ application   │ application │ Generate a new application workspace         │
      │ class         │ cl          │ Generate a new class                         │
      │ configuration │ config      │ Generate a CLI configuration file            │
      │ controller    │ co          │ Generate a controller declaration            │
      │ decorator     │ d           │ Generate a custom decorator                  │
      │ filter        │ f           │ Generate a filter declaration                │
      │ gateway       │ ga          │ Generate a gateway declaration               │
      │ guard         │ gu          │ Generate a guard declaration                 │
      │ interceptor   │ itc         │ Generate an interceptor declaration          │
      │ interface     │ itf         │ Generate an interface                        │
      │ library       │ lib         │ Generate a new library within a monorepo     │
      │ middleware    │ mi          │ Generate a middleware declaration            │
      │ module        │ mo          │ Generate a module declaration                │
      │ pipe          │ pi          │ Generate a pipe declaration                  │
      │ provider      │ pr          │ Generate a provider declaration              │
      │ resolver      │ r           │ Generate a GraphQL resolver declaration      │
      │ resource      │ res         │ Generate a new CRUD resource                 │
      │ service       │ s           │ Generate a service declaration               │
      │ sub-app       │ app         │ Generate a new application within a monorepo │
1.生成controller.ts

生成content模块的controllers、server、module

nest g mo modules/content&&nest g s modules/content&&nest g co modules/content/controllers/posts --no-spec --flat

然后写几个请求,然后用postman测试一下,没有postman也没关系,可以下载个vscode插件Thunder Client,没错就是这个小闪电

import { Body, Controller, Delete, Get, Param, Patch, Post } from '@nestjs/common';
​
interface PostsEntity {
    id: number;
    title: string;
    summary?: string;
    body: string;
}
let posts: PostsEntity[] = [
    { id: 1, title: '标题1', body: '内容1' },
    { id: 2, title: '标题2', body: '内容2' },
    { id: 3, title: '标题3', body: '内容3' },
    { id: 4, title: '标题4', body: '内容4' },
    { id: 5, title: '标题5', body: '内容5' },
    { id: 6, title: '标题6', body: '内容6' },
];
@Controller('posts')
export class PostsController {
    @Get() // 查询全部
    async queryAll() {
        return posts;
    }
​
    @Get(':id') // 查询单条 ':id'动态id
    async queryOnce(@Param('id') id: number) {
        // @Param(key?: string): 获取url中的params参数,比如 posts/1
        return posts.find((v) => v.id === Number(id));
    }
​
    @Post() // 新增
    async addPost(@Body() data: PostsEntity) {
        // @Body() 获取请求体
        const newPost: PostsEntity = { ...data, id: posts[posts.length - 1].id + 1 };
        posts.push(newPost);
        return posts;
    }
​
    @Patch(':id') // 更新部分数据
    async upDate(@Param('id') id: number, @Body() data: PostsEntity) {
        posts = posts.map((item) => (item.id === Number(id) ? { ...item, ...data } : item));
        return posts;
    }
​
    @Delete(':id') // 删除
    async delPost(@Param('id') id: number) {
        console.log('id', id);
        posts = posts.filter((v) => v.id !== Number(id));
        return posts;
    }
}
​

因为我在main.js中加了app.setGlobalPrefix('api');,所以地址是http://localhost:3000/api/posts

更多关于请求的内容可以在官网查询:

nest js 英文官网 NestJS - A progressive Node.js framework

nestjs 中英文网  NestJS 简介 | NestJS 中文文档 | NestJS 中文网

nestjs 纯中文网  Nest.js 中文文档

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值