准备

我使用的腾讯云开发作为数据库 文档地址:https://docs.cloudbase.net/api-reference/server/node-sdk/introduction

  1. 安装包,并初始化项目
    运行命令
npm install --save @cloudbase/node-sdk
  1. 创建控制器users
nest g controller users
  1. 在创建好的users文件夹中创建cloud文件夹(用于保存数据库的一些操作,如增删改查,初始化等)
  2. 创建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)
    }
}

我的项目结构

我把我的项目结构贴在这供个参考

在这里插入图片描述

Logo

华为AI开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐