网盘项目后端(Nestjs)环境搭建--集成Mongodb、Redis、Swagger配置

本文介绍了如何使用Vue和AntDesignVue进行前端开发,NestJS作为后端框架,配合Mongodb和Redis进行数据存储。作者详细描述了创建环境、配置Git、安装Swagger自动生成接口文档、部署MongoDB到Docker以及集成Redis和使用Mongoose操作数据库的过程。
摘要由CSDN通过智能技术生成

前言

想要做一个网盘项目,前端Vue + AntDesignVue ,后端 NestJs + Mongodb + Redis

刚开始做,才学了学Nest.js,想练手练手。

后端地址:https://github.com/Charlotte-n/merikle-pan-backed-sources

前端地址:https://github.com/Charlotte-n/merikle-pan

欢迎star

目前实现的

环境创建

github

新建一个仓库在GitHub上面

创建项目

nest new merikle-pan-backed

接着按照命令行安装依赖就可以了
安装依赖

配置git规范

可以看开发组件库配置环境
这篇文章中配置的git规范,来提交到github上

提交的时候,呈现的是这种效果
提交规范
在仓库呈现这种效果
仓库

使用Swagger自动生成接口文档

  1. 安装Swagger包
pnpm install --save @nestjs/swagger

2. 添加以下内容(官网配置)

 //新增的内容
 const config = new DocumentBuilder()
   .setTitle('Cats example')
   .setDescription('The cats API description')
   .setVersion('1.0')
   .addTag('cats')
   .build();
 const document = SwaggerModule.createDocument(app, config);
 SwaggerModule.setup('api', app, document);

接着让它跑起来

pnpm run start

在本地的https://localhost:3000/api可以看到你的文档

数据库

使用docker来进行部署mongodb,先在本地部署(主要是为了学习Docker哈哈哈),之后准备再去服务器部署

Docker

进行mongodb部署到docker里面,使用的是docker desktop

拉取镜像

# 最新版本 MongoDB
$ docker pull mongo
# 或者,指定需要的版本
$ docker pull mongo:4.0.4

创建容器

docker run --name docker_mongodb -v D:\Interview\merikle-pan\data:/data/db -d -p 27017:27017 mongo:latest --auth

进行数据卷的挂载,备份数据,将docker里面mongodb容器里面的数据储存到本机目录(可以写别的)D:\Interview\merikle-pan\data

接着进入mongodb容器

docker exec -it docker_mongodb mongo

接着进入admin数据库

mongosh admin

之后开始创建用户权限(创建超级管理员)

db.createUser({user: "admin", pwd: "admin", roles: [{role: "root", db: "admin"}]})

接着使用这个账号进行登录

db.auth("admin","admin")

最后就是跑在本机的Robot上面进行连接

下面填入你设置的账号和密码即可

连接数据库

  1. 创建一个文件夹
nest g lib db


2. 导入到main.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { DbModule } from '@libs/db';//新增的

@Module({
  imports: [DbModule],//新增的
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
  1. 连接数据库,需要有连接数据库的模块,并且让我们从sql语句中变为面向对象的操作模式,使用mongoose来进行连接(因为我们使用的数据库为mongodb,所以准备使用monoose来连接数据库,关系型数据库可以使用typeorm连接)(官方文档配置)
pnpm i @nestjs/mongoose mongoose

在db.module.ts中进行连接

import { Module } from '@nestjs/common';
import { DbService } from './db.service';
import 'reflect-metadata';
import { MongooseModule } from '@nestjs/mongoose';

@Gobal()
@Module({
  imports: [
    MongooseModule.forRoot('mongodb://127.0.0.1:27017/pan', {
      autoIndex: true,
      autoCreate: true,
    }),
  ],
  providers: [DbService],
  exports: [DbService],
})
export class DbModule {}

4. 在libs/db下面创建models来定义模型

之后就可以在这里面定义数据模型了

集成Redis

官方配置
安装redis-cli:需要在官方网站进行安装压缩包或者在docker desktop中安装redis,用的时候开启镜像就可以了,就是下面这个
redis

  1. 项目中安装redis
pnpm i redis

2.

nest g lib redis

3. 在 RedisModule 创建连接 redis 的 provider,导出 RedisService,并把这个模块标记为 @Global 模块

import { Global, Module } from '@nestjs/common';
import { RedisService } from './redis.service';
import { createClient } from 'redis';//新增

@Global()//新增
@Module({
  providers: [
    RedisService,
    //新增
    {
      provide: 'REDIS_CLIENT',
      async useFactory() {
        const client = createClient({
          socket: {
            host: 'localhost',
            port: 6379,
          },
        });
        await client.connect();
        return client;
      },
    },
  ],
  exports: [RedisService],
})
export class RedisModule {}

封装一些方法,存值,取值,删除,删除全部缓存

import { Inject, Injectable } from '@nestjs/common';
import { RedisClientType } from 'redis';

@Injectable()
export class RedisService {
  @Inject('REDIS_CLIENT')
  private redisClient: RedisClientType;
  //封装一些方法
  //获取值
  async get(key: string) {
    let value = await this.redisClient.get(key);
    try {
      value = JSON.parse(value);
    } catch (error) {}
    return value;
  }
  /**
   * 设置值
   * @param key {string} key
   * @param value 值
   * @param second 过期时间 秒
   * @returns Promise<any>
   */
  async set(key: string, value: any, second?: number) {
    value = JSON.stringify(value);
    return await this.redisClient.set(key, value, { EX: second });
  }
  //删除值
  async del(key: string) {
    return await this.redisClient.del(key);
  }
  //清除缓存
  async flushAll() {
    return await this.redisClient.flushAll();
  }
}

实验一下

nest g resource test-redis

在test-redis中进行使用

import { Inject, Injectable } from '@nestjs/common';
import { CreateTestRediDto } from './dto/create-test-redi.dto';
import { UpdateTestRediDto } from './dto/update-test-redi.dto';
import { RedisService } from '../../libs/redis/src/redis.service';

@Injectable()
export class TestRedisService {
  @Inject(RedisService)
  private redisServices: RedisService;
  create(createTestRediDto: CreateTestRediDto) {
    return 'This action adds a new testRedi';
  }

  findAll() {
    return `This action returns all testRedis`;
  }

  findOne(id: number) {
    console.log(123);
    //获取缓存内容
    return this.redisServices.get('name').then((r) => {
      console.log(r);
    });
  }

async findOne(id: number) {
  const name = await this.redisServices.get('name');
  console.log(name);
  return `This action findOne a #${id} testRedi`;
}

  remove(id: number) {
    return `This action removes a #${id} testRedi`;
  }
}



总结

好了,基本的弄好了,想着之后弄成Docker Compose(等我再研究研究,docker没学很多)

  • 43
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值