Ngrok 配置:實現 Uniapp 前后端項目內網穿透

文章目錄

    • 一、下載并安裝 ngrok
    • 二、配置 ngrok Authtoken
    • 三、啟動本地 uniapp 項目
    • 四、使用 ngrok 暴露本地服務
    • 五、通過公網 URL 訪問項目
    • 六、后端API項目的穿透問題排查 (uni-app + 后端 API 示例)
      • 交互流程圖示
    • 七、ngrok Web 界面 (本地監控)
    • 八、停止 ngrok
    • 總結

ngrok 是一款強大的工具,可以讓你將本地運行的 web 服務暴露到公網上,非常適合用于本地開發調試、向客戶演示項目或測試 webhook 等場景。

一、下載并安裝 ngrok

  1. 訪問 ngrok 官網下載頁面:https://ngrok.com/download

  2. 下載 Windows 版本的 ngrok

  3. 解壓 ngrok:將下載的 ngrok.zip 文件解壓到一個你方便訪問的目錄,解壓后你會得到一個 ngrok.exe 文件。
    在這里插入圖片描述

二、配置 ngrok Authtoken

為了使用 ngrok 的更多功能(例如自定義子域名等,盡管某些高級功能可能需要付費),建議連接到你的 ngrok 賬戶。

  1. 登錄 ngrok 官網:訪問 https://dashboard.ngrok.com/。

  2. 獲取 Authtoken:在儀表盤的 “Your Authtoken” 或 “Setup & Installation” 部分,你會找到你的 Authtoken。

  3. 配置 Authtoken

    • 運行ngrok.exe
    • 運行以下命令(將 YOUR_AUTHTOKEN 替換為你自己的 Authtoken):
      .\ngrok.exe config add-authtoken YOUR_AUTHTOKEN
      
    • 成功后,ngrok 會將 Authtoken 保存到其默認的配置文件中 (通常在 C:\Users\YourUserName\.ngrok2\ngrok.yml)。

    可選:將 ngrok添加到系統環境變量 (PATH)
    為了在任何目錄下都能直接運行 ngrok 命令,而不是每次都 cd 到其所在目錄,你可以將其路徑添加到系統環境變量 PATH 中。

    1. 在 Windows 搜索中搜索"環境變量",選擇"編輯系統環境變量"。
    2. 在"系統屬性"窗口中,點擊"系統變量(N)…"按鈕。
    3. 在"系統變量"區域找到名為 Path 的變量,選中它,然后點擊"編輯(E)…"。
    4. 點擊"新建(N)",然后輸入 ngrok.exe 所在的目錄路徑 (例如 D:\tools\ngrok)。
    5. 一路點擊"確定"保存更改。之后新打開的命令行窗口即可直接使用 ngrok 命令。
    • (截圖機會:展示添加環境變量的步驟)

三、啟動本地 uniapp 項目

接下來,我們需要一個在本地運行的 web 服務。這里以 uniapp H5 項目為例。

  1. 進入 uniapp 項目目錄:使用命令行工具 (CMD, PowerShell, Git Bash 等) cd 到你的 uniapp 項目根目錄。
  2. 啟動開發服務器:運行 uniapp 的 H5 開發命令。
    • 如果使用 npm:
      npm run dev:h5
      
    • 如果使用 yarn:
      yarn dev:h5
      
  3. 記錄本地地址和端口:項目啟動后,命令行通常會顯示 H5 預覽地址,例如 http://localhost:8080http://127.0.0.1:3000。記下這個端口號,我們稍后會用到。

四、使用 ngrok 暴露本地服務

現在,我們將使用 ngrok 將本地運行的 uniapp 項目暴露到公網上。

  1. 新建域并啟動

  2. 啟動隧道,運行 ngrok 命令
    在這里插入圖片描述

  3. 獲取公網URL:ngrok 啟動后,會在命令行界面顯示一些信息,最重要的就是 Forwarding 中的https:// 開頭的 URL,這就是你的公網訪問地址。

五、通過公網 URL 訪問項目

現在,你或你的朋友、同事、客戶等,可以在任何有網絡連接的設備上,通過瀏覽器打開上一步中 ngrok 生成的 Forwarding URL (通常建議使用 https 的那個),就能訪問到你本地運行的 uniapp 項目了,到這里對于未配置后端的項目來說已經穿透成功了。

六、后端API項目的穿透問題排查 (uni-app + 后端 API 示例)

當你使用 uni-app 開發前端,并需要連接到一個獨立的后端 API 服務(例如 Java Spring Boot, Node.js 等)時,通過 ngrok 暴露前端后,可能會遇到 API 請求失敗的問題。本地直接訪問 localhost:UNIAPP_DEV_PORT (uni-app H5 運行的端口) 時一切正常,但通過 ngrok 生成的公網 URL 訪問時,后端接口調用不通。

常見現象:

  • 瀏覽器開發者工具的網絡(Network)標簽頁顯示 API 請求失敗,錯誤可能是 net::ERR_CONNECTION_REFUSED
  • 或者,如果后端沒有正確配置CORS,可能會看到跨域相關的錯誤信息。

主要原因及解決方案 (針對絕對 BASE_URL 配置):

假設你的 uni-app 項目中,API 請求的基礎路徑 BASE_URL 是一個寫死的本地地址,例如:

// 在 api/index.js 或類似文件中
const BASE_URL = 'http://localhost:8080/api'; // 你的后端API基礎路徑
  1. 問題核心:localhost 指向的是客戶端

    • 當你的同學或同事通過 ngrok 的公網 URL (例如 https://xxxx.ngrok.io) 訪問你的 uni-app 應用時,應用內的 JavaScript 代碼(包括 API 請求)是在他們的瀏覽器中執行的。
    • 因此,代碼中對 http://localhost:8080/api 的請求,實際上是嘗試連接他們自己電腦上的 localhost:8080 服務。如果他們的電腦上沒有運行對應的后端服務,這個請求自然會失敗。
  2. 解決方案:為后端 API 服務也啟動 ngrok

    • 步驟1: 確保后端服務正常運行:首先,確保你的 Spring Boot (或其他) 后端服務正在你的開發機器上的 localhost:8080 (或你配置的任何端口) 成功運行。
    • 步驟2: 為后端啟動單獨的 ngrok 實例:打開一個新的命令行窗口,cd 到 ngrok.exe 所在的目錄(或者如果已配置環境變量,直接運行),然后為你的后端服務端口啟動 ngrok。如果后端運行在 8080 端口:
      ngrok http 8080
      
    • ngrok 會為你的后端服務生成另一個公網 URL,例如 https://yyyy.ngrok.io
    • 步驟3: (臨時) 修改前端的 BASE_URL:回到你的 uni-app 項目代碼,在 api/index.js (或類似文件) 中,將 BASE_URL 臨時修改為 ngrok 為后端生成的公網地址:
      // 臨時修改,用于公網演示
      const BASE_URL = 'https://yyyy.ngrok.io/api'; // 注意:這里是后端 ngrok 的地址
      
    • 步驟4: 重新編譯 uni-app 項目 (如果需要),并確保訪問前端 ngrok 地址的用戶獲取到的是更新了 BASE_URL 的前端代碼。
    • 現在,通過前端 ngrok URL 訪問應用時,API 請求就會正確地指向你通過 ngrok 暴露的公網后端服務了。
  3. 后端 CORS 配置:

    • 非常重要!你的后端服務(如 Spring Boot)必須配置 CORS (跨源資源共享) 策略,以允許來自你的前端 ngrok URL (例如 https://xxxx.ngrok.io) 和后端 ngrok URL (https://yyyy.ngrok.io,如果請求來源是它) 的請求。否則,即使地址正確,瀏覽器也可能因為安全策略阻止請求。
    • 在 Spring Boot 中,通常使用 @CrossOrigin注解或全局 CORS 配置。

替代方案 (推薦用于開發和更便捷的共享): 使用代理

雖然上述方法可行,但每次共享都需要修改 BASE_URL 并可能需要重新部署前端,比較繁瑣。更推薦的做法是在 uni-app 開發服務器層面設置代理,將特定的 API 請求轉發到本地后端。

  1. 前端 BASE_URL 使用相對路徑:
    // api/index.js
    const BASE_URL = '/api_proxy'; // 一個自定義的代理前綴
    // ... 確保請求方法中 url 拼接正確,例如: request({ url: options.url ...}) 變成 request({ url: BASE_URL + options.url ...})
    // 如果 options.url 已經是 /resource/action, 那么拼接后就是 /api_proxy/resource/action
    
  2. 配置 vue.config.js (uni-app H5 項目根目錄):
    如果項目根目錄下沒有 vue.config.js 文件,新建一個。
    // vue.config.js
    module.exports = {devServer: {proxy: {'/api_proxy': { // 匹配前端以 /api_proxy 開頭的請求target: 'http://localhost:8080', // 你的本地后端服務地址changeOrigin: true, // 必須,用于支持跨域pathRewrite: {'^/api_proxy': '/api' // 將請求路徑中的 /api_proxy 替換為 /api (如果后端是以 /api 開頭的)// 例如 /api_proxy/users/list -> http://localhost:8080/api/users/list}}}}
    };
    
    修改 vue.config.js 后,需要重啟 uni-app 開發服務器 (npm run dev:h5)。
  3. ngrok 暴露 uni-app 開發服務器: 這種情況下,你只需要像之前一樣,用 ngrok 暴露 uni-app H5 運行的端口 (例如 ngrok http UNIAPP_DEV_PORT)。uni-app 的開發服務器會自動將 /api_proxy 的請求轉發到你的本地后端。這樣,前端代碼中的 BASE_URL 無需改動,分享也更方便。

交互流程圖示

下面通過圖示來進一步說明兩種主要配置下的工作流程。

(一) 絕對 BASE_URL + 前后端分別使用 Ngrok (推薦用于需要固定公網后端地址的場景)

這種配置下,前端代碼中的 BASE_URL 直接指向后端 ngrok 的公網地址。

用戶 (瀏覽器) Ngrok 云服務 前端 Ngrok 代理 (開發者電腦) 后端 Ngrok 代理 (開發者電腦) Uni-app 開發服務器 (localhost:portA) Spring Boot 后端 (localhost:portB) 1. 請求前端頁面 (https://frontend.ngrok.io) 2. 轉發請求 3. 請求本地前端服務 4. 返回前端頁面代碼 5. 返回前端頁面代碼 6. 返回前端頁面代碼 前端加載完成,發起API請求 (BASE_URL='https://backend.ngrok.io/api') 7. API 請求 (https://backend.ngrok.io/api/...) 8. 轉發API請求 9. 請求本地后端服務 10. API 響應 11. API 響應 12. API 響應 用戶 (瀏覽器) Ngrok 云服務 前端 Ngrok 代理 (開發者電腦) 后端 Ngrok 代理 (開發者電腦) Uni-app 開發服務器 (localhost:portA) Spring Boot 后端 (localhost:portB)

解釋:

  • 用戶 (自己或他人):通過 https://frontend.ngrok.io (前端的公網 ngrok 地址) 訪問應用。
  • 前端應用加載后,其 API 請求直接指向 https://backend.ngrok.io/api (后端的公網 ngrok 地址)。
  • 這種方式清晰地分離了前端和后端的公網訪問點。

(二) 相對 BASE_URL + Uni-app devServer.proxy + 前端使用 Ngrok (推薦用于開發調試和便捷分享)

這種配置下,前端代碼中的 BASE_URL 是一個相對路徑 (如 /api_proxy),由 Uni-app 開發服務器代理到本地后端。

用戶 (瀏覽器) Ngrok 云服務 前端 Ngrok 代理 (開發者電腦) Uni-app 開發服務器 (含代理配置, localhost:portA) Spring Boot 后端 (localhost:portB) 1. 請求前端頁面 (https://frontend.ngrok.io) 2. 轉發請求 3. 請求本地前端服務 4. 返回前端頁面代碼 5. 返回前端頁面代碼 6. 返回前端頁面代碼 前端加載完成,發起API請求 (BASE_URL='/api_proxy') 7. API 請求 (https://frontend.ngrok.io/api_proxy/...) 8. 轉發API請求至前端Ngrok代理 9. 請求本地前端服務 (路徑 /api_proxy/...) Uni-app devServer 根據 proxy 配置: '/api_proxy/...' 轉發到 'http://localhost:portB/api/...' 10. 代理轉發API請求至本地后端 (http://localhost:portB/api/...) 11. API 響應 12. API 響應 13. API 響應 14. API 響應 用戶 (瀏覽器) Ngrok 云服務 前端 Ngrok 代理 (開發者電腦) Uni-app 開發服務器 (含代理配置, localhost:portA) Spring Boot 后端 (localhost:portB)

解釋:

  • 用戶 (自己或他人):通過 https://frontend.ngrok.io 訪問應用。
  • 前端應用加載后,其 API 請求 (例如 /api_proxy/users) 被發送到 https://frontend.ngrok.io/api_proxy/users
  • 這個請求到達開發者的 Uni-app 開發服務器后,其內部的代理設置會將此請求轉發給實際運行在 localhost:portB 的后端服務。
  • 這種方式下,只需要為前端啟動一個 ngrok 實例,配置相對簡單。

通用排查提示:

  • 確認后端服務已啟動并監聽正確端口:這是最基本的一步。
  • 直接測試后端接口:使用 Postman、curl 或直接在瀏覽器中(如果接口支持GET)訪問你的本地后端接口 (例如 http://localhost:8080/api/some-endpoint),確保它能正常工作并返回數據。如果本地都訪問不通,ngrok 自然也無法使其工作。

通過以上步驟,應該能解決大部分 ngrok 穿透后 API 請求失敗的問題。

七、ngrok Web 界面 (本地監控)

ngrok 還提供了一個本地的 Web 界面,用于監控通過 ngrok 隧道的所有 HTTP 請求和響應。默認情況下,這個界面的地址是 http://127.0.0.1:4040 (可以在 ngrok 啟動時的輸出信息中找到)。

打開這個地址,你可以查看所有請求的詳細信息 (headers等),檢查連接狀態,這對于調試非常有用。

八、停止 ngrok

當你不再需要公網訪問時,可以停止 ngrok。

  • 回到運行 ngrok 命令的那個命令行窗口。
  • 按下 Ctrl + C 組合鍵。
    ngrok 會斷開連接,公網 URL 將不再可用。你的本地 uniapp 項目仍然在運行(除非你也停止了它)。

總結

ngrok 是一個非常實用的內網穿透工具,能夠極大地簡化本地開發和調試過程中的分享與測試環節。通過本教程,你應該已經掌握了在 Windows 上使用 ngrok 暴露本地 uniapp 項目的基本方法,希望這對你有所幫助。


作者:xuan
個人博客:https://blog.ybyq.wang
歡迎訪問我的博客,獲取更多技術文章和教程。

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

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

相關文章

k8s灰度發布

基于 Traefik 的加權灰度發布-騰訊云開發者社區-騰訊云 Traefik | Traefik | v1.7 Releases traefik/traefik GitHub 從上面連接下載后上傳到harbor虛擬機 vagrant upload /C/Users/HP280/Downloads/traefik 下載配置文件 wget -c http://raw.githubusercontent.com/conta…

win10-django項目與mysql的基本增刪改查

以下都是在win10系統下,django項目的orm框架對本地mysql的表的操作 models.py----->即表對應的類所在的位置 在表里新增數據 1.引入表對應的在models.py中的類class 2.在views.py中使用函數:類名.objects.create(字段名值,字段名"值"。。。…

`ParameterizedType` 和 `TypeVariable` 的區別

在 Java 的泛型系統中,ParameterizedType 和 TypeVariable 是兩個不同的類型表示,它們都屬于 java.lang.reflect.Type 接口的子接口。兩者都在反射(Reflection)中用于描述泛型信息,但用途和含義不同。 🌟 一…

PR-2021

推薦深藍學院的《深度神經網絡加速:cuDNN 與 TensorRT》,課程面向就業,細致講解CUDA運算的理論支撐與實踐,學完可以系統化掌握CUDA基礎編程知識以及TensorRT實戰,并且能夠利用GPU開發高性能、高并發的軟件系統&#xf…

unity使用ZXing.Net生成二維碼

下載鏈接 https://github.com/micjahn/ZXing.Net 放到Plugins下即可使用

Ubuntu 編譯SRS和ZLMediaKit用于視頻推拉流

SRS實現視頻的rtmp webrtc推流 ZLMediaKit編譯生成MediaServer實現rtsp推流 SRS指定某個固定網卡,修改程序后重新編譯 打開SRS-4.0.0/trunk/src/app/srs_app_rtc_server.cpp,在 232 行后面添加: ZLMediaKit編譯后文件存放在ZLMediakit/rele…

如何備考GRE?

1.引言 GRE和雅思不太相同,首先GRE是美國人的考試,思維方式和很多細節和英系雅思不一樣。所以底層邏輯上我覺得有點區別。 難度方面,我感覺GRE不容易考低分,但考高分較難。雅思就不一樣了不僅上限難突破,下限還容易6…

uniapp|商品列表加入購物車實現拋物線動畫效果、上下左右拋入、多端兼容(H5、APP、微信小程序)

以uniapp框架為基礎,詳細解析商品列表加入購物車拋物線動畫的實現方案。通過動態獲取商品點擊位置與購物車坐標,結合CSS過渡動畫模擬拋物線軌跡,實現從商品圖到購物車圖標的動態效果。 目錄 核心實現原理坐標動態計算拋物線軌跡模擬?動畫元素控制代碼實現詳解模板層設計腳本…

React中使用openLayer畫地圖

OpenLayers(簡稱ol)是一個?開源的WebGIS前端開發庫?,基于JavaScript實現,主要用于在網頁中嵌入動態二維地圖。 官方網站: https://openlayers.org 中文官網: https://openlayers.vip 大家可以去參考學習…

WHAT - 緩存命中 Cache Hit 和緩存未命中 Cache Miss

文章目錄 一、什么是緩存命中?二、前端開發要知道哪些緩存機制(以及命中條件)?1. 瀏覽器緩存(主要針對靜態資源)常見的緩存位置關鍵 HTTP 頭字段(決定命中與否) 2. 前端應用層緩存&a…

10 個可靠的 Android 文件傳輸應用程序

Android 文件傳輸是 Android 用戶的常見需求。我們經常需要將文件從一臺 Android 設備傳輸到 PC 或 Mac。但我們怎樣才能做到這一點呢?俗話說,工欲善其事,必先利其器。因此,首先了解 10 個鋒利的 Android 文件傳輸應用程序&#x…

AlphaEvolve:LLM驅動的算法進化革命與科學發現新范式

AlphaEvolve:LLM驅動的算法進化革命與科學發現新范式 本文聚焦Google DeepMind最新發布的AlphaEvolve,探討其如何通過LLM與進化算法的結合,在數學難題突破、計算基礎設施優化等領域實現革命性進展。從48次乘法優化44矩陣相乘到數據中心資源利…

Java大師成長計劃之第24天:Spring生態與微服務架構之分布式配置與API網關

📢 友情提示: 本文由銀河易創AI(https://ai.eaigx.com)平臺gpt-4-turbo模型輔助創作完成,旨在提供靈感參考與技術分享,文中關鍵數據、代碼與結論建議通過官方渠道驗證。 在微服務架構中,如何管理…

eSwitch manager 簡介

eSwitch manager 的定義和作用 eSwitch manager 通常指的是能夠配置和管理 eSwitch(嵌入式交換機)的實體或接口。在 NVIDIA/Mellanox 的網絡架構中,Physical Function(PF)在 switchdev 模式下充當 eSwitch manager&am…

最新開源 TEN VAD 與 Turn Detection 讓 Voice Agent 對話更擬人 | 社區來稿

關鍵詞:對話式 AI | 語音智能體 | Voice Agent | VAD | 輪次檢測 | 聲網 | TEN GPT-4o 所展示對話式 AI 的新高度,正一步步把我們在電影《Her》中看到的 AI 語音體驗變成現實。AI 的語音交互正在變得更豐富、更流暢、更易用,成為構建多模態智…

AI實踐用例---日程規劃(通用日程管理文件ICS)靈感踩坑日常

我是一位踐行獨立開發者之路的菜鳥開發者。 由于執行力較差,常常有很多想法但是很多時候沒有去踐行。 所以我有了讓大模型為我生成日程安排的想法,這確實可以,很簡單。只需要將你的想法告訴ai就行了。 例如: 發給AI的提示詞: 我想你幫我對,嗯,未來的一年做一個嗯,大…

大疆無人機??DRC 鏈路

在大疆上云API中,??DRC 鏈路??通常指 ??Device-Cloud Remote Control Link(設備-云端遠程控制鏈路)??,它是無人機(或設備)與云端服務之間建立的??實時控制與數據傳輸通道??,用于實現…

tomcat一閃而過,按任意鍵繼續以及控制臺中文亂碼問題

問題描述 今天在打開tomcat,啟動startup.bat程序時 tomcat直接閃退,后面查找資料后發現,可以通過編輯startup.bat文件內容,在最后一行加入pause即可讓程序不會因為異常而終止退出 這樣方便查看tomcat所爆出的錯誤: 然后,我明確看到我的tomcat啟動程序顯示如下的內容,沒有明確…

中大型水閘安全監測系統解決方案

一、方案概述 中大型水閘作為水利工程的重要組成部分,承擔著調節水位、控制水流、防洪排澇等多重功能,在防洪減災、水資源配置、生態環境改善等方面發揮著巨大作用。然而,由于歷史原因,許多水閘存在建設標準偏低、質量較差、配套設…

軌跡誤差評估完整流程總結(使用 evo 工具)

roslaunch .launch rosbag play your_dataset.bag -r 2.0 ? 第二步:錄制估計軌跡 bash 復制編輯 rosbag record -O traj_only.bag /aft_mapped_to_init 運行一段時間后 CtrlC 停止,生成 traj_only.bag 第三步:提取估計軌跡和真值軌跡為…