實現一個專注應用-后端開發(一)-搭建

搭建后端服務

  • 搭建服務
    • 拆分下用戶服務
  • 增加公共庫
    • 通用模塊
  • 運行一下
  • 接入數據庫
    • 安裝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.pswp.cn/diannao/70327.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70327.shtml
英文地址,請注明出處:http://en.pswp.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網站 訪問主頁 發現存在一個數據庫調用頁面 右上角有一…