实现一个专注应用-后端开发(一)-搭建

搭建后端服务

  • 搭建服务
    • 拆分下用户服务
  • 增加公共库
    • 通用模块
  • 运行一下
  • 接入数据库
    • 安装Prisma
      • 增加prisma库
    • redis
      • 增加redis服务

搭建服务

使用nestjs来做 这里是nestjs的网站Nestjs

安装 nest

npm i -g @nestjs/cli

创建一个项目 并在开发工具打开

nest new todo

nest new xx 是新建一个项目
会让你选择包管理工具,我用的是pnpm

拆分下用户服务

在根目录下执行

nest g app user

这个时候 就拆分成了两个服务,方便分开维护,用户服务只负责用户的登录注册以及用户信息查询。

增加公共库

两个服务会有一些公共的依赖模块,比如数据库,装饰品,工具等等。这个时候需要抽离出来。

通用模块

主要存放一些 拦截器,装饰器,工具方法等,项目小,不再拆分模块,一般公用的都塞到一个里面。 当然也可以多拆分几个,装饰器丢到装饰器模块,拦截器都丢到拦截器模块。

nest g lib common

执行后一路回车。
此时目录结构为这样
在这里插入图片描述

运行一下

控制台执行

npm run start:dev todo

在这里插入图片描述
在apps/todo/src/main.ts可以看到port是3000,当然可以修改为你想要的。然后在浏览器中访问http://localhost:3000,显示了Hello World!。这里是调用了get请求,在apps/todo/src/app.controller.ts可以看到。
在这里插入图片描述

到这里一个简单的后端服务就搭建完成了。

接入数据库

接入数据库,用的mysql。mysql搭建教程有很多,这里不在阐述。

安装Prisma

这里的数据库管理工具使用Prisma。

npm install prisma --save-dev

初始化

npx prisma init

执行完成后 目录结构如下

在这里插入图片描述
点击.env 修改连接地址 如果是本地的mysql则为localhost否则修改为ip地址

DATABASE_URL="mysql://root:你的密码@localhost:3306/todo"

然后修改prisma/schema.prisma的数据库为mysql

datasource db {provider = "mysql"url      = env("DATABASE_URL")
}

如果你用的是vscode/cursor 可以安装下prisma的插件,有代码高亮会舒服很多,插件直接搜索prisma最多下载的就是。
在这里插入图片描述
我这里直接忽略了密码登录,如果需要 可以加个 password string

model User {id          String      @id @default(uuid())username    String  @uniqueemail       String?  @uniquewxId    String?  @uniquecreatedAt   DateTime @default(now())updatedAt   DateTime @updatedAt@@index([username], name: "username_idx")@@index([email], name: "email_idx")@@index([wxId], name: "wxId_idx")
}

重置下数据库

npx prisma migrate reset 

生成下数据表

npx prisma migrate dev --name user

npx prisma migrate dev --name user 是一个 Prisma CLI 命令,用于在开发环境中创建和应用新的数据库迁移。以下是这个命令的具体含义和作用:
含义和作用
创建新的迁移: 该命令会根据当前的 Prisma schema 文件生成一个新的迁移文件。迁移文件包含了将数据库结构从上一个状态更改到当前状态所需的 SQL 语句。
2. 应用迁移: 在生成迁移文件后,migrate dev 会立即将该迁移应用到数据库中。这意味着数据库结构会更新以匹配最新的 Prisma schema。
3. 命名迁移: --name user 参数为生成的迁移文件指定一个名称。在迁移文件夹中,迁移文件会以时间戳和指定名称命名,例如 20231010123456_user,以便于识别和管理。
适用于开发环境: 该命令主要用于开发环境,以便在开发过程中快速迭代数据库模型。

在这里插入图片描述
在这里插入图片描述

增加prisma库

nest g lib prisma

修改prisma.service.ts

import { Injectable, OnModuleInit } from '@nestjs/common';
import { PrismaClient } from '@prisma/client';@Injectable()
export class PrismaService extends PrismaClient implements OnModuleInit {constructor() {super({log: [{emit: 'stdout',level: 'query'},{emit: 'stdout',level: 'error'}]})}async onModuleInit() {await this.$connect();}
}

当模块初始化完成时连接数据库,log是打印。

redis

npm install redis --save-dev

新建一个库模块

nest g lib redis

在 redis.module.ts中 增加redis连接代码

import { Global, Module } from '@nestjs/common';
import { createClient } from 'redis';
import { RedisService } from './redis.service';@Global()
@Module({providers: [RedisService,{provide: 'REDIS_CLIENT',async useFactory(configService: ConfigService) {const config =  {url: 'redis://localhost:6379',password: 'xxx',};const client = createClient(config);await client.connect();return client;},},],exports: [RedisService],
})
export class RedisModule {}

增加redis服务

在redis.service.ts中

import { Inject, Injectable } from '@nestjs/common';
import { RedisClientType } from 'redis';@Injectable()
export class RedisService {@Inject('REDIS_CLIENT')private redisClient: RedisClientType;async keys(pattern: string) {return await this.redisClient.keys(pattern);}async get(key: string) {return await this.redisClient.get(key);}async set(key: string, value: string | number, ttl?: number) {await this.redisClient.set(key, value);if (ttl) {await this.redisClient.expire(key, ttl);}}async del(key: string) {await this.redisClient.del(key);}
}

当前代码地址 code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/70327.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++17并行化加速STL算法——std::execution

C17 并行化STL算法 文章目录 C17 并行化STL算法概念环境准备工具类 并行算法 - 使用并行算法 - 执行策略总览选择标准详细介绍顺序执行 seq并行化顺序执行 par并行化乱序执行 par_unseq 并行算法 - 异常处理可以不使用并行算法并行算法 - 限制并行算法有哪些原有算法17引入新算…

Deepseek 怼CHATGPT实况

提示词: 用犀利的语言批评ChatGPT 深度思考(R1) 嗯,用户让我用犀利的语言批评ChatGPT。首先,我需要理解他们的动机。可能他们遇到了ChatGPT的某些问题,比如回答不准确或者缺乏深度,所以想表达不满。也有…

always和assign语法区别

always语句可以带时钟, 也可以不带时钟。 一,assign和always区别 assign 语句使用时不能带时钟。 assign a=1; assign b=2; 在always不带时钟时,逻辑功能和assign完全一致,都是只产生组合逻辑。比较简单的组合逻辑推荐使用assign语句,比较复杂的组合逻辑推荐使用 al…

解析跨域:原理、解决方案与实践指南

解析跨域:原理、解决方案与实践指南 🌐 在现代Web开发中,跨域问题是一个常见且重要的挑战。随着互联网应用的日益复杂,前端与后端之间的交互越来越频繁,跨域请求的需求也随之增加。 一、跨域问题的本质与产生条件 &a…

鸿蒙开发:熟知@BuilderParam装饰器

前言 本文代码案例基于Api13。 在实际的开发中,我们经常会遇到自定义组件的情况,比如通用的列表组件,选项卡组件等等,由于使用方的样式不一,子组件是动态变化的,针对这一情况,就不得不让使用方把…

MSI微星电脑冲锋坦克Pro Vector GP76 12UGS(MS-17K4)原厂Win11系统恢复镜像,含还原功能,预装OEM系统下载

适用机型:【MS-17K4】 链接:https://pan.baidu.com/s/1P8ZgXc6S_J9DI8RToRd0dQ?pwdqrf1 提取码:qrf1 微星笔记本原装出厂WINDOWS11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、MSI Center控制中心等预装…

【面试题】杭州士腾科技-面试题汇总

历史小剧场 历史是一个好客的主人,却从不容许客人取代它的位置。历史也从来就不是一个人或事几个人可以支配创造的。所谓时势造英雄,实乃至理名言。 真正支配历史的人,不是朱元璋,是稻田里辛勤劳作的老农,是官道上来往…

Go入门之map

map类型是引用类型,必须初始化才能使用,为key-value形式 var userinfo make(map[string]string)userinfo["username"] "zhangsan"var user map[string]string{"username": "张三","age": &qu…

切换镜像源(npm)

常见的npm镜像源 官方源 URL: https://registry.npmjs.org 淘宝镜像源(npmmirror) URL: https://registry.npmmirror.com 其他常用镜像源 URL: https://registry.cnpmjs.org (CNPM) 这里是引用 切换npm镜像源 切换到官方源 npm config set registry http…

【大模型】DeepSeek 高级提示词技巧使用详解

目录 一、前言 二、DeepSeek 通用提示词技巧 2.1 DeepSeek 通用提示词技巧总结 三、DeepSeek 进阶使用技巧 3.1 DeepSeek一个特定角色的人设 3.1.1 为DeepSeek设置角色操作案例一 3.1.2 为DeepSeek设置角色操作案例二 3.2 DeepSeek开放人设升级 3.2.1 特殊的人设&#…

Qt开发③Qt的信号和槽_概念+使用+自定义信号和槽+连接方式

目录 1. 信号和槽概述 1.1 事件和控件 1.2 信号的本质 1.3 槽的本质 2. 信号和槽的使用 2.1 connect 连接信号和槽 2.2 查看内置信号和槽 2.3 Qt Creator 生成信号槽代码 3. 自定义信号和槽 3.1 不带参数的信号和槽 3.2 带参数的信号和槽 4. 信号与槽的连接方式 4…

【动态路由】系统Web URL资源整合系列(后端技术实现)【apisix实现】

需求说明 软件功能需求:反向代理功能(描述:apollo、eureka控、apisix、sentinel、普米、kibana、timetask、grafana、hbase、skywalking-ui、pinpoint、cmak界面、kafka-map、nacos、gateway、elasticsearch、 oa-portal 业务应用等多个web资…

Vue2 中使用 UniApp 时,生命周期钩子函数总结

在 Vue2 中使用 UniApp 时,生命周期钩子函数是一个重要的概念。它允许开发者在特定的时间点运行代码,管理组件的生命周期。以下是 Vue2 中 UniApp 常用的生命周期钩子函数总结: 1. beforeCreate 说明: 组件实例刚被创建,此时数据…

在Ubuntu24.04上安装Stable-Diffusion1.10.1版本

之前曾介绍过在Ubuntu22.04上安装Stable-Diffusion: 在Ubuntu22.04上部署Stable Diffusion_ubuntu stable dif-CSDN博客 这个安装我们使用conda python虚拟机。这次我们介绍的是在Ubuntu24.04安装Stable-Diffusion的最新版本V1.10.1(截止到今天最新版&…

IIS asp.net权限不足

检查应用程序池的权限 IIS 应用程序池默认使用一个低权限账户(如 IIS_IUSRS),这可能导致无法删除某些文件或目录。可以通过以下方式提升权限: 方法 1:修改应用程序池的标识 打开 IIS 管理器。 在左侧导航树中&#x…

MongoDB 常用命令速查表

以下是一份 MongoDB 常用命令速查表&#xff0c;涵盖数据库、集合、文档的增删改查、索引管理、聚合操作等场景&#xff1a; 1. 数据库操作 命令说明show dbs查看所有数据库use <db-name>切换/创建数据库&#xff08;需插入数据后才会显示&#xff09;db.dropDatabase()…

23种设计模式 - 模板方法

模式定义 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它通过定义算法的骨架&#xff08;固定步骤&#xff09;&#xff0c;允许子类在不改变算法结构的情况下重写特定步骤。该模式的核心是将通用流程封装在基类中&#xff…

使用Java爬虫获取1688自定义API操作接口

在电商领域&#xff0c;1688作为国内领先的B2B平台&#xff0c;提供了丰富的API接口&#xff0c;允许开发者获取商品信息、店铺信息等。其中&#xff0c;custom 接口允许开发者进行自定义操作&#xff0c;获取特定的数据。本文将详细介绍如何使用Java爬虫技术&#xff0c;通过1…

MVTEC数据集笔记

前言 网上的博客只有从论文里摘出的介绍&#xff0c;没有数据集文件详细的样子&#xff0c;下载数据集之后&#xff0c;对数据集具体的构成做一个补充的笔记。 下载链接&#xff1a;https://ai-studio-online.bj.bcebos.com/v1/7d4a3cf558254bbaaf4778ea336cb14ed8bbb96a7f2a…

记一次渗透测试实战之Sightless

信息收集 端口扫描 使用nmap进行端口探测&#xff0c;发现存在21、22、80端口开放。 FTP未授权访问 尝试21端口未授权访问。 目录爆破 使用工具进行爆破目录。 未发现有用的路径&#xff0c;接着尝试访问80端口。 Web网站 访问主页 发现存在一个数据库调用页面 右上角有一…