@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()