發表文章

Vue + Vite 專案部署到 Nginx pinia 模組錯誤

問題說明 當你將 Vue + Vite 專案部署到 Nginx,並在瀏覽器開啟網站時,可能會遇到以下錯誤: Uncaught TypeError: Failed to resolve module specifier "pinia". Relative references must start with either "/", "./", or "../". 這是因為你部署的是 原始碼 ,而不是 Vite 打包後的 dist/ 資料夾 。 解決方案:部署   dist  打包資料夾 以下是完整部署步驟: 設定 Nginx 指向   dist/ 資料夾 請確認你的 Nginx 設定如下所示,將 root 設定為打包後的 dist/ 路徑: server { listen 80; server_name yourdomain.com; root /var/www/your-project/dist; index index.html; location / { try_files $uri $uri/ /index.html; } } 請將 /var/www/your-project/dist 改成你的實際路徑。 try_files 的設定能夠正確處理 Vue 的前端路由(SPA 模式)。 設定完成後,重新啟動 Nginx: sudo systemctl restart nginx 最終確認 部署完成後,瀏覽器應該能正常載入所有模組(例如 pinia ),不會再出現錯誤訊息。

如何避免使用者使用上一頁回來

解1. 因為不想讓使用者按上一頁,回來看到本頁,所以判斷當使用者按上一頁進來時,回到上一頁。 window.addEventListener('pageshow', function (event) {     if(event.persisted || window.performance && window.performance.navigation.type == 2){         window.history.go(-1);     } },false); window.performance.navigation.type 屬性包含了頁面導航的類型。該屬性可以用來判斷頁面是如何被訪問的。 屬性值 0:TYPE_NAVIGATE:使用者通過常規導航方式訪問頁面,比如點擊一個連結,或者一般的 get 方式。 1:TYPE_RELOAD:使用者通過刷新,包括 JavaScript 調用刷新接口等方式訪問頁面。 2:TYPE_BACK_FORWARD:使用者通過後退按鈕訪問本頁面。   參考來源: https://blog.csdn.net/weixin_41190571/article/details/87970446 解2. 使用window.replace方法,讓頁面不產生紀錄,不讓使用者可以回到上一頁。

使用 ssh terminal連線cloudflare tunnels伺服器

圖片
在完成cloudflare tunnel SSH設定後,想要用terminal對Server進行連線,如果還沒完成設定請參考: https://lanwp.org/15-how-to-use-cloudflaretunnel-build-webbase-sshterminal/ 發現怎麼樣都無法透過SSH連線到自己的伺服器 經過爬文發現需要透過cloudflare的驗證才能連線上,參考來源: https://community.cloudflare.com/t/about-connect-as-a-user-ssh-client-windows-10/524994 1.下載cloudflare的程式 https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/downloads/ ,放在路徑"C:\Users\{user}\.ssh\cloudflared-windows-amd64.exe",linux的話路徑為/usr/local/bin/cloudflared 2.編輯檔案"C:\Users\{user}\.ssh\config" Host example.com     HostName example.com     ProxyCommand C:\Users\{user}\.ssh\cloudflared-windows-amd64.exe access ssh --hostname %h     User user 完成後就可以透過terminal完成連線!

訪問者模式(Visitor Pattern)以PHP為例

訪問者模式(Visitor Pattern)是一種行為型設計模式,它用於將操作從元素的結構中分離出來。這種模式可以讓我們在不修改元素類別的情況下,定義新的操作。 以下是一個使用 PHP 語言的訪問者模式重構案例: // 元素接口 interface Element {     public function accept(Visitor $visitor): void; } // 具體元素 A class ConcreteElementA implements Element {     public function accept(Visitor $visitor): void {         $visitor->visitConcreteElementA($this);     }     public function operationA(): string {         return "ConcreteElementA: Operation A";     } } // 具體元素 B class ConcreteElementB implements Element {     public function accept(Visitor $visitor): void {         $visitor->visitConcreteElementB($this);     }     public function operationB(): string {         return "ConcreteElementB: Operation B";     } } // 訪問者接口 interface Visitor {     public function visitConcreteElementA(ConcreteElementA $elementA): void; ...

橋樑模式(Bridge Pattern)以PHP為例

橋樑模式(Bridge Pattern)是一種結構型設計模式,它將抽象和實作分離,使它們可以獨立變化。這種模式通常用於將類別的抽象部分與其實作部分分離,並且可以獨立地擴展和修改它們。 以下是一個使用 PHP 語言的橋樑模式重構案例: // 實作部分的介面 interface Implementation {     public function operationImplementation(): string; } // 具體的實作部分 A class ConcreteImplementationA implements Implementation {     public function operationImplementation(): string {         return "ConcreteImplementationA";     } } // 具體的實作部分 B class ConcreteImplementationB implements Implementation {     public function operationImplementation(): string {         return "ConcreteImplementationB";     } } // 抽象部分的類別 abstract class Abstraction {     protected $implementation;     public function __construct(Implementation $implementation) {         $this->implementation = $implementation;     }     public function operation(): string {         return "Abstraction:...

狀態模式(State Pattern) 以PHP為例

 狀態模式(State Pattern)是一種行為型設計模式,它允許物件在內部狀態發生變化時改變其行為。這種模式將物件的行為封裝在不同的狀態類別中,使得物件能夠根據當前的狀態選擇不同的行為。 以下是一個使用 PHP 實現狀態模式的重構案例: / / Context(上下文)類別維護著當前狀態物件並委派相關的請求給該狀態物件 class Context {     private $state;     public function __construct(State $state) {         $this->state = $state;     }     public function setState(State $state) {         $this->state = $state;     }     public function request() {         $this->state->handle($this);     } } // State(狀態)介面聲明了具體狀態類別應實現的方法 interface State {     public function handle(Context $context): void; } // ConcreteStateA(具體狀態A)實現 State 介面並提供具體的行為 class ConcreteStateA implements State {     public function handle(Context $context): void {         echo "ConcreteStateA: Handle\n";         // 狀態轉換         $context->setState(new C...

原型模式(Prototype Pattern) 以PHP為例

 原型模式(Prototype Pattern)是一種創建型設計模式,它通過複製現有物件來生成新物件,而不需要使用者知道具體的創建邏輯。這種模式通常用於當創建物件的成本很高昂或複雜時,並且希望通過複製現有物件來獲得新物件。 下面是一個使用 PHP 實現原型模式的重構案例: abstract class Prototype {     protected $name;     public function __construct($name) {         $this->name = $name;     }     abstract public function clone(): Prototype;     public function getName() {         return $this->name;     } } class ConcretePrototype extends Prototype {     public function clone(): Prototype {         return new ConcretePrototype($this->getName());     } } // 使用範例 $prototype = new ConcretePrototype('Prototype'); $clone = $prototype->clone(); echo $prototype->getName();  // Output: Prototype echo $clone->getName();  // Output: Prototype 在這個例子中,我們首先定義了一個抽象類別 `Prototype`,它包含一個抽象方法 `clone` 和一個共享的屬性 `name`。 `clone` 方法用於生成該物件的克隆,子類別必須實現這個方法。 `getName` 方法用於獲取...