主頁 > 企業開發 > vane 一個適用于前端打工人的全堆疊框架,nodejs+vue3+typescript

vane 一個適用于前端打工人的全堆疊框架,nodejs+vue3+typescript

2023-07-01 08:42:43 企業開發

vane

寫這個的初衷是因為每次用node寫介面的時候總是需要一些寫大一堆的東西, 也有些人把很多介面都放在一個js檔案內, 看起來很是雜亂, 后來用到nuxt寫的時候, 感覺用檔案名來命名介面路徑很是方便, 無論是query引數還是params引數,都可以通過檔案名來命名, 也可以通過檔案夾層級清晰的反映出介面之間的關系(雖然類似nuxt,next這種的框架確實很好,但是好處同樣也是壞處,很難完全的前后端分離,不能只寫前端,或者后端,而且也不需要再去學習相關的知識), 于是就有了這個專案, 能夠節省很大一部分時間, 也能夠讓介面更加清晰, 也能夠讓介面更加清晰, 也能夠讓介面更加清晰, 重要的事情說三遍,
節省下來的時間用來休息和摸魚多好(不是讓你接著內卷的),
如果真的幫到了你的話,覺得這個專案還不錯的話, 可以給我一個star, 也可以給我一個star, 也可以給我一個star, 重要的事情說三遍,

github傳送門

gitee傳送門

介面檔案

Snipaste_2023-06-26_18-06-59.png

Snipaste_2023-06-26_18-07-28.png

技術堆疊

web
Vue3, TypeScript, Vite node
server
node, TypeScript, express, sequelize, mysql, redis
server進階
docker, docker-componse, pm2

node版本: ^18
pnpm版本: ^8

服務端

配置hosts

如果是windows的話,請在C:\Windows\System32\drivers\etc\hosts檔案中添加以下內容

請替換為自己真實的mysql以及redis資料庫ip地址, 192.168.31.202僅為示例

192.168.31.202 vane-redis-master
192.168.31.202 vane-mysql-master
192.168.31.202 vane-mysql-node1
192.168.31.202 vane-mysql-node2

安裝依賴

npm install -g pnpm (也可以指定版本安裝pnpm npm install -g pnpm@8)
pnpm install

請勿使用淘寶鏡像源,會導致依賴安裝失敗
還原設定: pnpm config set registry https://registry.npmjs.org/

啟動命令

開發環境

啟動服務端: pnpm dev:server
啟動web端: pnpm dev:client
全部啟動: pnpm dev\

正式環境(Centos)

啟動服務端

  1. 原生docker部署(不推薦), 會根據Dockerfile檔案中配置啟動 會執行一個run.sh腳本,可按需求修改
  2. 非docker部署(極不推薦,需要服務器支持node18,并且較為繁瑣),可以運行pnpm start:server(請先執行打包命令),需要自己啟動以及配置資料庫,并且node>=18并不支持Centos7,極力推薦使用docker進行部署
  3. docker-componse部署(推薦), 一鍵腳本 sh docker_start.sh all/server/db (引數按需選擇all或者server或者db,不傳入的話默認為server)
    1. db: 啟動mysql以及redis資料庫 如果你是第一次啟動的話需要下載GitHub中releases符合自己本地代碼版本的資料庫檔案(版本可在根目錄下package.json中查看),并解壓到/home/docker-volumes目錄下,正確的目錄應該是/home/docker-volumes/vane,也可以自己修改db/docker-compose.yml檔案中的相關配置,自己配置資料庫
    2. server: 啟動node服務端和nginx,默認埠映射為80,如果你想修改的話,請自行修改server/docker-compose.yml檔案中的相關配置
    3. all: 資料庫以及服務端全部啟動
    4. 建議: 資料庫如無修改,啟動一次即可

docker 鏡像下載問題

  1. 如果你的服務器無法下載docker鏡像,請嘗試修改docker鏡像源,具體操作請自行查詢(帖子太多了,沒必要寫在這里.....)
  2. 如果你嘗試修改docker鏡像源后,仍然無法下載,在網盤中下載對應的壓縮包,docker匯入鏡像,云盤內有使用說明,按照操作即可
    網盤地址 提取碼: 8gyc

單獨打包

如果你有其他的需求,可以單獨打包,打包后的檔案在dist檔案夾下

  1. 打包服務端 pnpm build:server
  2. 打包web端 pnpm build:client

環境配置

開發環境配置

node>=18, pnpm>=8, mysql:5.7, redis:6.2

正式環境

node>=16.14.0(如果可以安裝18版本的最好,16版本只是能保證基本的安裝依賴), mysql, redis, pnpm>=8,docker(可選), docker-componse(可選)

配置env檔案

server檔案夾下創建.env檔案,并按照.env.example檔案中的格式進行配置

添加介面路由

路由添加

server/src/routes檔案夾中添加.ts檔案即可,路由會根據所在位置以及檔案名自動加載,無需顯示引入

檔案名示例

routes/user/list.ts => http://localhost:9999/user/list(get請求)
routes/user/index.ts => http://localhost:9999/user(get請求)
routes/user/list.post.ts => http://localhost:9999/user/list(post請求)
routes/user/list[a,b].post.ts => http://localhost:9999/user/list(post請求,并req.params中帶有a和b兩個引數)

檔案內容示例

import { Request, Response } from '@/routes/types';
export default async function (req: Request, res: Response) {
  try {
    /**
     * 某些操作
     */
    res.ok({
      message: '操作成功',
      data: data.Location.split('/images/')[1],
    });
  } catch (error) {
    /**
     * 失敗之后的操作
     */
    res.fail(error);
  }
}

// 中間件 非必填
export const middleware = [()=>{}];

介面白名單(不需要登錄鑒權)

系統固定白名單(不可修改)

修改server\src\serve\sys\routes.serve.ts中的constantRouteWhiteList陣列, 修改之后需要清空mysql中的sys_routes表和redis中的routeWhitelist快取,否則無法生效

自定義白名單(可修改)

啟動前端服務,在http://localhost:4000/vane/system/white-api中進行配置,無需修改mysql和redis

日志記錄

api日志

介面日志會自動記錄在server/logs/api檔案夾下,檔案名為access-${日期}.log

sql日志

sql日志會自動記錄在server/logs/sql檔案夾下,檔案名為sql-${日期}.log

檔案上傳

本專案使用了騰訊云物件存盤,如果您沒有騰訊云物件存盤的話,請自行修改server/src/server/routes/upload.ts檔案中的上傳邏輯,并修改client/src/utils/config.ts檔案中的CDNURL 遠程資源地址

注意事項

  1. mysql使用了一主多從集群模式,如果您僅僅使用一個mysql的話,請修改server/.env檔案中的mysql配置,以及server/src/serve/db.ts檔案中sequelize的實體初始化代碼

  2. 開發環境下, 默認不啟動資料庫集群模式,如果需要啟動集群模式,請修改server檔案夾下的nodemon.json中的NODE_ENV為production

  3. 雖然使用了pnpm的workspace的模式,但是由于某些原因服務端在打包后,不能正確決議作業區間內的包名,所以禁止在服務端代碼內使用作業區間內的包,但是web端可以使用服務端的

前端

如果你用過vue2版本的vue-admin的話,上手應該會非常快,因為本專案的前端是模仿vue-admin的vue3版本,并且使用了typescript,所以如果你不熟悉vue3的話,建議先學習一下vue3的基礎知識

目錄結構

|-- ???client
    |-- ???.vscode
        |-- ??settings.json
    |-- ???deploy (一鍵上傳腳本,去掉deploy.config copy.json中的copy,并修改配置)
        |-- ??deploy.config copy.json
        |-- ??deploy.config.json
        |-- ??index.js
        |-- ??sysInfo.js
    |-- ???public
        |-- ??favicon.ico
        |-- ??logo.png
    |-- ???src
        |-- ???api (介面存放目錄)
        |-- ???assets (靜態資源存放目錄)
        |-- ???components (公共組件存放目錄)
            |-- ???Breadcrumb
            |-- ???CountTo
            |-- ???Cropper
            |-- ???GithubCorner
            |-- ???Hamburger
            |-- ???IconSelect
            |-- ???LangSelect
            |-- ???Notice
            |-- ???Page
            |-- ???Pagination
            |-- ???RightPanel
            |-- ???Screenfull
            |-- ???ScreenLock
            |-- ???SizeSelect
            |-- ???SvgIcon
            |-- ???UploadFile
            |-- ???WangEditor
        |-- ???directive (自定義屬性)
            |-- ???permission
            |-- ??index.ts
        |-- ???hooks (自定義hooks)
            |-- ??useForm.ts
        |-- ???lang (i18,目前還有一些小問題,不影響使用)
            |-- ??en.ts
            |-- ??index.ts
            |-- ??zh-cn.ts
        |-- ???layout (頁面布局組件)
            |-- ???components
            |-- ??index.vue
        |-- ???router (路由)
            |-- ??index.ts
        |-- ???store (pinia)
            |-- ???modules
            |-- ??index.ts
        |-- ???styles (公共class樣式)
            |-- ??element-plus.scss
            |-- ??index.scss
            |-- ??mixin.scss
            |-- ??sidebar.scss
            |-- ??tailwind.css
            |-- ??variables.module.scss
        |-- ???theme (主題配色)
            |-- ??blue_black.ts
            |-- ??default.ts
            |-- ??green_black.ts
            |-- ??green_white.ts
            |-- ??index.ts
            |-- ??purple_white.ts
            |-- ??red_black.ts
            |-- ??red_white.ts
            |-- ??violet_dark.ts
        |-- ???utils (工具方法)
            |-- ??addWaterMark.ts
            |-- ??config.ts
            |-- ??downloadFile.ts
            |-- ??encryption.ts
            |-- ??filter.ts
            |-- ??hospitalOptions.ts
            |-- ??i18n.ts
            |-- ??index.ts
            |-- ??mitter.ts
            |-- ??request.ts
            |-- ??resize.ts
            |-- ??scroll-to.ts
            |-- ??storage.ts
            |-- ??validate.ts
        |-- ???views (頁面組件存放處)
            |-- ???component
            |-- ???dashboard
            |-- ???demo
            |-- ???dept
            |-- ???error-page
            |-- ???login
            |-- ???redirect
            |-- ???shop
            |-- ???system
        |-- ??App.vue
        |-- ??components.d.ts
        |-- ??env.d.ts
        |-- ??main.ts
        |-- ??permission.ts (路由鑒權)
        |-- ??settings.ts (頁面配置)
    |-- ??.editorconfig
    |-- ??.env (公共的env)
    |-- ??.env.development (開發模式獨有的env)
    |-- ??.env.production (生產模式獨有的env)
    |-- ??.env.staging (.....)
    |-- ??.eslintignore
    |-- ??.eslintrc.js
    |-- ??.gitignore
    |-- ??.prettierignore
    |-- ??.prettierrc.js
    |-- ??commitlint.config.js
    |-- ??components.d.ts
    |-- ??global.d.ts (全域ts宣告,請不要import引入其他,否則會失效)
    |-- ??index.html (模板html)
    |-- ??package.json
    |-- ??postcss.config.js
    |-- ??tailwind.config.js (tailwind 組態檔)
    |-- ??tsconfig.json
    |-- ??tsconfig.node.json
    |-- ??vite.config.ts (vite 組態檔)

添加路由

  1. src/router/index.ts中添加路由,并且在src/views中添加頁面組件
  2. src/views中添加頁面組件, 系統管理=>選單管理中添加選單地址, 并在 系統管理=>角色管理為角色分配選單權限

代碼提交

根目錄下執行以下命令
git add .
pnpm commit
git push

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/556434.html

標籤:JavaScript

上一篇:Prisma 避坑指南!

下一篇:返回列表

標籤雲
其他(161947) Python(38266) JavaScript(25519) Java(18286) C(15238) 區塊鏈(8275) C#(7972) AI(7469) 爪哇(7425) MySQL(7278) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5876) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4609) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2438) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1985) HtmlCss(1982) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • vane 一個適用于前端打工人的全堆疊框架,nodejs+vue3+typescript

    # vane 寫這個的初衷是因為每次用node寫介面的時候總是需要一些寫大一堆的東西, 也有些人把很多介面都放在一個js檔案內, 看起來很是雜亂, 后來用到nuxt寫的時候, 感覺用檔案名來命名介面路徑很是方便, 無論是query引數還是params引數,都可以通過檔案名來命名, 也可以通過檔案夾層 ......

    uj5u.com 2023-07-01 08:42:43 more
  • Prisma 避坑指南!

    * 環境變數問題 ```typescript datasource db { provider = "mysql" url = env("DATABASE_URL") } ``` 1. `npx prisma db push` 默認取 .env 組態檔,那多環境怎么處理? 2. 增加 `.env. ......

    uj5u.com 2023-07-01 08:42:38 more
  • 記錄--讓整個網站界面無滾動條

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 界面無滾動條 滾動條的優化也有很多種,比如隨便再網上搜索美化瀏覽器滾動條樣式,就會出現些用css去美化滾動條的方案。 那種更好呢? 沒有更好只有更合適 像默認的滾動條的話,他能讓你方便摁著往下滑動(他比較寬)特別省勁,不用擔心美化過后變細 ......

    uj5u.com 2023-07-01 08:42:11 more
  • 如何實作巡檢報告?

    # 什么是巡檢報告 巡檢報告是指對某一個系統或設備進行全面檢查,并把檢查結果及建議整理成報告的程序。 巡檢報告通常用于評估系統或設備的運行狀況與性能,以發現問題、優化系統、提高效率、降低故障率等方面提供參考。 ![file](https://img2023.cnblogs.com/other/233 ......

    uj5u.com 2023-07-01 08:41:36 more
  • HTML網頁內容適配——標題欄

    前言 現在很多網頁用的都是固定標題欄,就像這樣: 很多網站為了兼容小視窗還會做個JS適配: 但是如果視窗比這還小的話... 那就只剩下一部分了。 由于設定position:fixed后元素不會隨著滾動條滾動,所以超出頁面邊緣的部分將永遠看不見,除非增大視窗或縮小顯示比例。 很多設計師忘記考慮這一點了 ......

    uj5u.com 2023-07-01 08:40:26 more
  • 1.1 Metasploit 工具簡介

    Metasploit 簡稱(MSF)是一款流行的開源滲透測驗框架,由`Rapid7`公司開發,可以幫助安全和IT專業人士識別安全性問題,驗證漏洞的緩解措施,并管理專家驅動的安全性進行評估,提供真正的安全風險情報。并且該框架還提供了一系列攻擊模塊和`Payload`工具,可用于漏洞利用、及漏洞攻擊。同... ......

    uj5u.com 2023-07-01 08:39:46 more
  • 1.1 Metasploit 工具簡介

    Metasploit 簡稱(MSF)是一款流行的開源滲透測驗框架,由`Rapid7`公司開發,可以幫助安全和IT專業人士識別安全性問題,驗證漏洞的緩解措施,并管理專家驅動的安全性進行評估,提供真正的安全風險情報。并且該框架還提供了一系列攻擊模塊和`Payload`工具,可用于漏洞利用、及漏洞攻擊。同... ......

    uj5u.com 2023-07-01 08:38:27 more
  • Vue3從入門到精通(三)

    vue3插槽Slots 在 Vue3 中,插槽(Slots)的使用方式與 Vue2 中基本相同,但有一些細微的差異。以下是在 Vue3 中使用插槽的示例: // ChildComponent.vue <template> <div> <h2>Child Component</h2> <slot></ ......

    uj5u.com 2023-06-30 09:07:11 more
  • 記錄--寫一個高德地圖巡航功能的小DEMO

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 風格設定 加載地圖 使用AMapLoader.load加載地圖,從 控制臺 申請一個屬于自己的key import AMapLoader from '@amap/amap-jsapi-loader'; ... const AMap = a ......

    uj5u.com 2023-06-30 08:29:46 more
  • CSS基礎-背景

    # 背景 ### **background-color** 背景顏色, 可以使用十六進制、rgb、rgba表示。 **語法** ```css /**selector 背景元素的原則去*/ /** color 背景顏色的值, 可以是 顏色名稱、十六進制值、RGB、RGBA*/ selector { b ......

    uj5u.com 2023-06-30 08:29:30 more