学习typeScript写服务(nestjs)【三,连接云数据库】
·
准备
我使用的腾讯云开发作为数据库 文档地址:https://docs.cloudbase.net/api-reference/server/node-sdk/introduction
- 安装包,并初始化项目
运行命令
npm install --save @cloudbase/node-sdk
- 创建控制器users
nest g controller users
- 在创建好的users文件夹中创建cloud文件夹(用于保存数据库的一些操作,如增删改查,初始化等)
- 创建init.ts文件,初始化数据库的一些配置
- init.ts
// 初始化示例
const tcb = require("@cloudbase/node-sdk");
// 初始化资源
// 云函数下不需要secretId和secretKey。
// env如果不指定将使用默认环境
const app = tcb.init({
secretId: "xxxxx",
secretKey: "xxxx",
env: "xxxx"
});
export const db = app.database()
上面的xxxx需要换成自己对应的信息
- secretId和secretKey 获取位置在 https://console.cloud.tencent.com/cam/capi
- env 位置 https://console.cloud.tencent.com/tcb/env/overview?envId=ts-serve-demo-7g69tystf69f74f0&rid=4

添加数据
首先创建一个people集合用于存储人员数据,需要存储的信息为name和age

在users文件夹下创建文件夹dto,并创建文件people.dto.ts,用于存放类型约束
import { ApiProperty } from "@nestjs/swagger";
export class CreatePeopleDto {
@ApiProperty()//为了使类属性在SwaggerModule中可见
readonly name: string;
@ApiProperty({
type: Number,
})
age: number;
}
然后刚刚创建的cloud文件夹下创建文件addPeople.ts
import { CreatePeopleDto } from "../dto/people.dto";
import { db } from "./init";
//连接云开发people集合
const collection = db.collection("people")
export const addPeople = async (params: CreatePeopleDto) => {
try {
//云开发添加数据
const res = await collection.add(params)
return res
} catch (error) {
return error
}
};
最后在users.controller.ts里调用
import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
import { ApiQuery, ApiTags } from '@nestjs/swagger';
import { addPeople } from './cloud/addPeople';
import { CreatePeopleDto, EditPeopleDto } from './dto/people.dto';
//为控制器附加一个标签
@Controller('users')
@ApiTags('用户')
export class UsersController {
@Post('add')
async add(@Body() createPeopleDto: CreatePeopleDto): Promise<string> {
return await addPeople(createPeopleDto)
}
}
然后在wagger中调用看下效果


这就代表着添加成功了,再来看看云数据库中

先刷新然后就看到进来一条数据,说明添加成功了,当然了最后肯定要用接口查数据的
查询数据
在cloud文件夹下创建文件getPeople.ts
import { db } from "./init";
const collection = db.collection("people")
const _ = db.command
export const getList = () => {
try {
const res = collection
.where()
.get()
return res
} catch (error) {
return error
}
};
然后在users.controller.ts引用
import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
import { ApiQuery, ApiTags } from '@nestjs/swagger';
import { getList } from './cloud/getPeople'
@Controller('users')
@ApiTags('用户')
export class UsersController {
@Get('list')
async find(): Promise<string> {
return await getList({})
}
}
swagger中调用

修改数据
在dto文件夹下文件people.dto.ts中
import { ApiProperty } from "@nestjs/swagger";
export class CreatePeopleDto {
@ApiProperty()
readonly name: string;
@ApiProperty({
type: Number,
})
age: number;
}
export class EditPeopleDto extends CreatePeopleDto{
@ApiProperty()
id:string
}
在cloud文件夹下创建文件editPeople.ts
import { EditPeopleDto } from "../dto/people.dto";
import { db } from "./init";
const collection = db.collection("people")
export const editPeople = async (params: EditPeopleDto) => {
try {
let { id, ...data } = params
//修改数据写法
const res = await collection.doc(id).update(data)
console.log(res.upsertedId) // 打印插入的文档的id
return res
} catch (error) {
return error
}
};
然后在users.controller.ts引用
import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
import { ApiQuery, ApiTags } from '@nestjs/swagger';
import { editPeople } from './cloud/editPeople';
import { CreatePeopleDto, EditPeopleDto } from './dto/people.dto';
@Controller('users')
@ApiTags('用户')
export class UsersController {
@Post('update')
async updated(@Body() editPeopleDto: EditPeopleDto) {
return await editPeople(editPeopleDto)
}
}
swagger中调用


删除数据
在cloud文件夹下创建文件removePeople.ts
import { db } from "./init";
const collection = db.collection("people")
export const delPeople = async (id: string) => {
try {
const res = await collection.doc(id).remove()
return res
} catch (error) {
return error
}
};
然后在users.controller.ts引用
import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
import { ApiQuery, ApiTags } from '@nestjs/swagger';
import { delPeople } from './cloud/removePeople';
@Controller('users')
@ApiTags('用户')
export class UsersController {
@Get('del')
async del(@Query('id') id: string) {
return await delPeople(id)
}
}
我的项目结构
我把我的项目结构贴在这供个参考

更多推荐




所有评论(0)