Vue+Go 自定義打字素材的打字網站

Typing_Key_Board

這是一個基于Vue 3和Go語言的自定義素材打字練習網站,靈感來源于常用字打字練習,解決了大多數網站無法自定義打字素材的問題。在 Typing_Key_Board (簡稱TKB)中,用戶可以自定義打字素材進行練習,在復習代碼的同時仍然可以練習打字速度,一舉兩得。

Github倉庫地址

Typing_Key_Board
歡迎大家來練手,貼出在線演示網址:(在線打字)佬們輕點。期待您的star~

項目截圖

  • 自定義打字素材:
    請添加圖片描述

  • 打字練習
    請添加圖片描述

  • 打字歷史記錄(可以看到自己的進步)
    請添加圖片描述

項目結構

項目采用前后端分離架構:

  • frontend: Vue+ Vite實現的前端
  • backend: Go語言實現的后端API,使用SQLite存儲數據

功能特點

  • 內置多種編程相關的打字練習素材
  • 用戶可以自定義添加練習文本內容
  • 支持英文的打字練習
  • 實時顯示打字結果,正確顯示綠色,錯誤顯示紅色
  • 允許刪除錯誤輸入并回滾進度
  • 統計打字錯誤數量和準確率
  • 打字歷史記錄功能,記錄每次練習的錯誤數和準確率
  • 素材內容持久化保存到SQLite數據庫,不用擔心數據丟失。

前端本地啟動方法

# 進入前端目錄
cd frontend# 安裝依賴
npm install# 啟動開發服務器
npm run dev

前端會在 http://localhost:3000 啟動。

后端本地啟動方法

# 進入后端目錄
cd backend# 下載依賴
go mod tidy# 啟動服務器
go run main.go

后端API會在 http://localhost:8080 啟動。

技術棧

前端

  • Vue
  • Vue Router
  • Vite
  • Axios

后端

  • Go
  • Gin框架
  • SQLite

使用Docker部署到云服務器

  • 修改文件列表

    • main.js
    • main.go(修改TODO的位置的IP)
  • 利用文件上傳工具上傳到云服務器的自建目錄下,項目結構如下:

   typing-app/├── frontend/│   ├── src/│   ├── public/│   ├── package.json│   ├── Dockerfile│   └── docker/│       └── nginx.conf├── backend/│   ├── main.go│   ├── go.mod│   ├── go.sum│   └── Dockerfile├── docker-compose.yml└── data/
  • 進入項目目錄

cd /xxx/typing-app

  • 使用 Docker Compose 構建鏡像

docker-compose build

  • 等待成功后啟動容器

docker-compose up -d

  • 檢查容器是否正常運行

docker-compose ps

應該顯示 frontend 和 backend 兩個容器的狀態為 up。

  • 查看容器日志確保沒有出現錯誤

docker-compose logs

  • 在服務器安全組打開8000和9000端口

  • 訪問應用

http://服務器公網IP:8000進入即可訪問~

如果在使用過程中遇到問題可以參看下方的解決方案。

可能會遇到的問題

Ubuntu系統安裝Docker-compose

sudo apt install -y docker-compose

? 驗證安裝:

docker-compose --version

拉取鏡像遇到報錯
ERROR: Service 'backend' failed to build: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

這個報錯通常是需要配置國內鏡像源:(/etc/docker/daemon.json)

{"registry-mirrors" : ["https://docker.registry.cyou","https://docker-cf.registry.cyou","https://dockercf.jsdelivr.fyi","https://docker.jsdelivr.fyi","https://dockertest.jsdelivr.fyi","https://mirror.aliyuncs.com","https://dockerproxy.com","https://mirror.baidubce.com","https://docker.m.daocloud.io","https://docker.nju.edu.cn","https://docker.mirrors.sjtug.sjtu.edu.cn","https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn","https://docker.rainbond.cc","https://do.nark.eu.org","https://dc.j8.work","https://dockerproxy.com","https://gst6rzl9.mirror.aliyuncs.com","https://registry.docker-cn.com","http://hub-mirror.c.163.com","http://mirrors.ustc.edu.cn/","https://mirrors.tuna.tsinghua.edu.cn/","http://mirrors.sohu.com/" ],"insecure-registries" : ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"debug": true,"experimental": false
}

重啟Docker服務

sudo systemctl daemon-reload

sudo systemctl restart docker

可以使用 docker pull golang:1.23.0 嘗試一下是否能成功,如果不成功則需要檢查DNS配置。

cat /etc/resolv.conf

修改配置文件為:

# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.# nameserver 127.0.0.53
nameserver 114.114.114.114
nameserver 8.8.8.8
options timeout:10 attempts:3 rotate single-request-reopen
  • 延長嘗試的時間,確保能夠連接上并且下載,在這里我設置為10秒,也可以設置為更長的時間。
  • 設置nameserver
啟動之后如果又修改了代碼怎么辦?

比如現在修改了Nginx的配置文件

嘗試直接重啟容器:

docker restart typingapp_frontend_1

如果不成功,就重建前端容器:

# 停止前端容器
docker stop typingapp_frontend_1
# 刪除前端容器
docker rm typingapp_frontend_1
# 重新創建并啟動前端容器
docker-compose up -d frontend

檢查是否正常運行:

docker ps

又比如修改了docker-compose文件

需要重新構建并啟動容器

docker-compose down
# docker-compose build backend
docker-compose build --no-cache backend
docker-compose up -d
總結:

? 修改了前后端的代碼之后,只需要先down掉容器,重新構建并上線即可。

進入前后端容器的方法

docker exec -it 容器name sh

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/906162.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/906162.shtml
英文地址,請注明出處:http://en.pswp.cn/news/906162.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

開源物聯網平臺(OpenRemote)

在物聯網技術蓬勃發展的當下,OpenRemote作為一款強大的開源物聯網平臺,正逐漸在多個領域嶄露頭角。尤其是在智能能源管理領域,它為微電網和分布式能源網絡提供了全面且靈活的數據集成與管理方案,展現出獨特的優勢。 OpenRemote提供…

Spring Security與SaToken的對比與優缺點分析

Spring Security與SaToken對比分析 一、框架定位 Spring Security 企業級安全解決方案,深度集成Spring生態提供完整的安全控制鏈(認證、授權、會話管理、攻擊防護)適合中大型分布式系統 SaToken 輕量級權限認證框架,專注Token會…

每日一道leetcode(新學數據結構版)

208. 實現 Trie (前綴樹) - 力扣(LeetCode) 題目 Trie(發音類似 "try")或者說 前綴樹 是一種樹形數據結構,用于高效地存儲和檢索字符串數據集中的鍵。這一數據結構有相當多的應用情景,例如自動…

【自然語言處理與大模型】大模型(LLM)基礎知識④

(1)微調主要用來干什么? 微調目前最主要用在定制模型的自我認知和改變模型對話風格。模型能力的適配與強化只是輔助。 定制模型的自我認知:通過微調可以調整模型對自我身份、角色功能的重新認知,使其回答更加符合自定義…

基于 Spring Boot 瑞吉外賣系統開發(十五)

基于 Spring Boot 瑞吉外賣系統開發(十五) 前臺用戶登錄 在登錄頁面輸入驗證碼,單擊“登錄”按鈕,頁面會攜帶輸入的手機號和驗證碼向“/user/login”發起請求。 定義UserMapper接口 Mapper public interface UserMapper exte…

什么是TCP協議?它存在哪些安全挑戰?

一、TCP協議概述 TCP(傳輸控制協議)是互聯網中面向連接、可靠的傳輸層協議,主要負責在不可靠的IP層上實現數據的可靠傳輸。其核心特點包括: 面向連接:通信前需通過三次握手(SYN-SYN/ACK-ACK)建…

12條熱門照片提示

12條熱門照片提示 1. 賽博朋克光彩 (Cyberpunk Glow-Up) 未在文件中顯示2. 卡通化我 (Cartoonify Me) Convert this image of [your subject here] into a 3D Pixar-style cartoon clean lines, soft lighting, expressive features, and a polished render that feels cine…

Java求職面試揭秘:從Spring到微服務的技術挑戰

文章簡述 在這篇文章中,我們將通過一個幽默的面試場景,揭秘互聯網大廠Java求職者在面試中面對的技術挑戰。面試官將從Spring框架、微服務架構到大數據處理等多個維度進行提問,并詳細講解這些技術點的應用場景和解決方案,幫助小白…

用Python輸出一個文件夾的所有文件結構

輸出一個文件夾的所有目錄和文件結構 新建一個Python文件,輸入 這個文件表示查詢一個文件夾所有的目錄結構 import osdef print_directory_structure(root_dir):"""打印樹狀目錄結構(優化版)"""if not os.p…

R語言的專業網站top5推薦

李升偉 以下是學習R語言的五個頂級專業網站推薦,涵蓋教程、社區、資源庫和最新動態: 1.R項目官網 (r-project.org) R語言的官方網站,提供軟件下載、文檔、手冊和常見問題解答。特別適合初學者和高級用戶,是獲取R語言核心資源的…

IntelliJ IDEA給Controller、Service、Mapper不同文件設置不同的文件頭注釋模板、Velocity模板引擎

通過在 IntelliJ IDEA 中的 “Includes” 部分添加多個文件頭模板,并在 “Files” 模板中利用這些包含來實現不同類型文件的注釋。以下是為 Controller、Service、Mapper 文件設置不同文件頭的完整示例: 1. 設置 Includes 文件頭模板 File > Settin…

LabVIEW雙音信號互調失真測量

該VI構建實現了一套完整的雙音信號互調失真(IMD)測量系統。該系統通過精確控制信號生成、采集與分析流程,實現對被測設備(DUT)非線性特性的量化評估,可廣泛應用于通信設備、音頻系統、射頻器件等領域的研發…

56.合并區間(java)

題目描述: 1.先判斷給定intervals是否為空或者大小是否為1,是則直接返回intervals。 2.對intervals進行排序 數組形式則使用:Arrays.sort(intevals,(a,b)->Integer.compare(a[0],b[0])); ArrayList形式:intervals.sort((a,b)-…

Redis設計與實現——Redis命令參考與高級特性

Redis命令參考 數據類型相關命令 SET:設置鍵值,支持過期時間、不存在/存在條件。GET:獲取鍵值,若鍵不存在返回 nil。INCR/DECR:將鍵的整數值增1/減1,鍵不存在時初始化為0。MSET/MGET:批量設置…

基于 STM32 的全自動洗車監控系統設計與實現

摘要 本文提出一種基于 STM32F103RCT6 芯片的全自動洗車監控系統方案,通過多傳感器融合與智能控制算法,實現車輛檢測、洗車流程自動化及狀態遠程監控。系統集成硬件選型、電路設計、軟件流程及通信功能,可廣泛應用于智能洗車場景。 一、硬件系統設計 1. 核心芯片選型 主控…

掌握Multi-Agent實踐(七):基于AgentScope分布式模式實現多智能體高效協作[并行加速大模型輔助搜索、分布式多用戶協同辯論賽]

之前的案例都是運行在單臺機器上以單進程形式運行,受限于 Python 的全局解釋器鎖,實際只能有效利用一個 CPU 的計算資源,并且無法支持多個用戶從自己的電腦上接入同一個 Multi-Agent 應用進行交互。?為了提高運行效率并支持多用戶接入同一個應用中,AgentScope 提供了分布式…

docker-compose部署項目(springboot服務)以及基礎環境(mysql、redis等)ruoyi-ry

上傳jar 配置文件等 到目錄:/home/ruoyi/docker 設置權限 chmod x *.sh 開通端口(我已經開通了) sh ./deploy.sh port 開始構建 docker-compose build 構建成功 可以先拉取鏡像 docker pull nacos/nacos-server docker pull nginx docker …

Axure疑難雜癥:統計分析頁面引入Echarts示例動態效果

親愛的小伙伴,在您瀏覽之前,煩請關注一下,在此深表感謝! Axure產品經理精品視頻課已登錄CSDN可點擊學習https://edu.csdn.net/course/detail/40420 課程主題:統計分析頁面引入Echarts示例動態效果 主要內容:echart示例引入、大小調整、數據導入 應用場景:統計分析頁面…

如何使用WordPress創建美食博客

不管你是否意識到,食物是我們生活的核心。有些人將其用作燃料,而另一些人則將食譜作為一種藝術形式呈現。如果您屬于后者,并且想創建一個美食博客來分享您的熱情,那么WordPress是一個頂級平臺。 幾乎每個話題都有一個博客利基&am…

【MySQL】庫與表的操作

一、庫的操作 1. 查看數據庫 語法:show databases;這里的database是要加s的 查看當前自己所處的數據庫:select database(); 例如下圖,我當前所處的數據庫就是在class1數據庫 2. 創建數據庫 語法:create database [if not e…