nest简单使用(参考小满zs

@nestjs/cli脚手架

使用nestjs/cli脚手架创建nest项目,使用命令nest new 项目名字

nest --help查看命令

nest g co 文件名生成controller.ts      nest g mo 文件名生成  module.ts

nest g s 文件名生成service.ts            nest g resource 文件名直接生成CURD

比如get请求

打印query参数,@Request可以简写成@Req,响应可以简写为@Res

 @Get()
  findAll(@Request() req) {
    console.log(req.query)
    return this.userService.findAll()
  }

打印出小余

Query

query是语法糖,比如用req.query可以使用query就可以了,比如上个案例

 @Get()
  findAll(@Query() query) {
    console.log(query)
    return this.userService.findAll()
  }

Body

body是post请求的语法糖

  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    console.log(createUserDto)
    return {
      code: 200,
      message: 'success',
      data: {
        createUserDto
      }
    }
  }

如果想要获取特定的key,可以通过@Body(name)进行获取

@Post()
  create(@Body('name') createUserDto: CreateUserDto) {
    console.log(createUserDto)
    return {
      code: 200,
      message: 'success',
      data: {
        createUserDto
      }
    }
  }

@Query()也可以这样

form-data和x-www-form-urlencoded有什么区别

如果你只是传输简单的键值对数据,可以选择使用 x-www-form-urlencoded 。 如果你需要上传文件或二进制数据,那么 form-data 是更合适的选择

query和params区别

params:/router1/:id 
query:/router1?id=123

@Params和@Headers

和@Body,@Query一样,@Params读取的是params的数据,@Headers是读取请求头的信息

下载session会话id

npm i express-session --save

装声明依赖 npm i @types/express-session -D

在main.ts设置session

import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
import * as session from 'express-session'

async function bootstrap() {
  const app = await NestFactory.create(AppModule)
  app.use(session({ secret: 'xiaoyu', name: 'xiaoyu.session', rolling: true, cookie: { maxAge: 1000 * 60 * 60 * 24 * 30 } }))
  await app.listen(3000)
}
bootstrap()

后端验证码插件安装

npm install svg-captcha -S,具体查看小满zs博客https://xiaoman.blog.csdn.net/article/details/126327047

其中req.session可以使用装饰器@Session

前端axios携带cookie,axios.defaults.withCredentials=true

连接数据库

安装依赖

npm install --save @nestjs/typeorm typeorm mysql2

在app.module中注册

import { Module } from '@nestjs/common'
import { AppController } from './app.controller'
import { AppService } from './app.service'
import { UserModule } from './user/user.module'
import { TestModule } from './test/test.module'
import { TypeOrmModule } from '@nestjs/typeorm'
// 数据库

@Module({
  imports: [
    UserModule,
    TestModule,
    TypeOrmModule.forRoot({
      type: 'mysql', //数据库类型
      username: 'root', //账号
      password: '*******', //密码
      host: 'localhost', //host
      port: 13306, //
      database: 'test', //库名
      // entities: [__dirname + '/**/*.entity{.ts,.js}'], //实体文件
      synchronize: true, //synchronize字段代表是否自动将实体类同步到数据库
      retryDelay: 500, //重试连接数据库间隔
      retryAttempts: 10, //重试连接数据库的次数
      autoLoadEntities: true
    })
  ],
  controllers: [AppController],
  providers: [AppService]
})
export class AppModule {}

主要是多了

import { TypeOrmModule } from '@nestjs/typeorm'
imports: [
    UserModule,
    TestModule,
    TypeOrmModule.forRoot({
      type: 'mysql', //数据库类型
      username: 'root', //账号
      password: 'yujian0923', //密码
      host: 'localhost', //host
      port: 13306, //
      database: 'test', //库名
      // entities: [__dirname + '/**/*.entity{.ts,.js}'], //实体文件
      synchronize: true, //synchronize字段代表是否自动将实体类同步到数据库
      retryDelay: 500, //重试连接数据库间隔
      retryAttempts: 10, //重试连接数据库的次数
      autoLoadEntities: true
    })
  ],

找到entities实体文件夹,创建如下表

import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn } from 'typeorm'

@Entity()
export class Test {
  @PrimaryGeneratedColumn()
  id: number

  @Column('varchar')
  name: string

  @Column('int')
  age: number

  @CreateDateColumn()
  createDate: Date
}

然后在对应的module下关联实体

import { Module } from '@nestjs/common'
import { TestService } from './test.service'
import { TestController } from './test.controller'
import { TypeOrmModule } from '@nestjs/typeorm'
import { Test } from './entities/test.entity'

@Module({
  imports: [TypeOrmModule.forFeature([Test])],
  controllers: [TestController],
  providers: [TestService]
})
export class TestModule {}

主要是

import { TypeOrmModule } from '@nestjs/typeorm'
imports: [TypeOrmModule.forFeature([Test])],

然后数据库就成功创建了


以post请求为例

在service进行引入

import { InjectRepository } from '@nestjs/typeorm'
import { Test } from './entities/test.entity'
import { Repository } from 'typeorm'

进行依赖注入

 constructor(@InjectRepository(Test) private readonly test: Repository<Test>) {}

然后把传过来的数据通过save进行保存

create(createTestDto: CreateTestDto) {
    console.log(createTestDto.name)
    const data = new Test()
    data.name = createTestDto.name
    data.age = createTestDto.age

    return this.test.save(data)
  }

解决后端跨域问题

npm install cors

npm install @types/cors -D

在main.ts文件中,引入cors

import * as cors from 'cors'

然后通过app.use使用中间件

import { NestFactory } from '@nestjs/core'
import { AppModule } from './app.module'
// import * as session from 'express-session'
import * as cors from 'cors'

async function bootstrap() {
  const app = await NestFactory.create(AppModule)
  app.use(cors())
  // app.use(session({ secret: 'xiaoyu', name: 'xiaoyu.session', rolling: true, cookie: { maxAge: 1000 * 60 * 60 * 24 * 30 } }))
  await app.listen(3000)
}
bootstrap()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值