看下面的場景,我想知道這在架構方面是否可以被認為是一個很好的做法:
- 使用 NextJS 框架在服務器上呈現的 React 應用程式。由于應用程式的資料經常變化,它使用服務器端渲染(“SSR”或“動態渲染”)。在代碼方面,它獲取
getServerSideProps()函式上的資料。這意味著它將在每次請求時由服務器執行。 - 在同一個服務器實體中,有一個并行運行的 API 應用程式(它可以是 NodeJS API、Python Flask 應用程式,...)。此應用程式負責查詢資料庫、準備模型并對資料應用任何轉換。API 可以從外部訪問。
我的問題是:NextJS 如何在內部與 API 應用程式通信?通過本地主機埠發送請求是正確的方法嗎?如果沒有,是否有替代方法不暗示 NextJS 將外部 HTTP 請求發送回同一服務器本身?
關鍵要求之一是每個應用程式必須保持獨立。它們目前在同一臺服務器上運行,但它們來自不同的代碼存盤庫,并且每個都有自己的 SDLC 和發布流程。它們有自己的域 (URL),將來它們可能存在于不同的服務器實體上。
我知道在 NextJS 中,您可以使用Prisma等庫來查詢資料庫。但這不是一個選擇。資料建模由 API 管理,我希望避免重復作業。此外,一旦 NextJS 在客戶端呈現,React 將繼續通過正常的 HTTP 請求呼叫 API 應用程式。這是為了保持動態的前端體驗。
uj5u.com熱心網友回復:
當前端應用程式獨立于后端運行時,這是非常常見的情況。反向代理通常可以幫助我們。
這是我建議您使用的簡單方法來實作(這也是最好的方法之一)
- 為您的前端和后端應用程式使用不同的埠
- 所有 api 都應該以特定的 url 開頭,
/api并且您的前端路由不能以/api - 使用網路服務器(我主要使用Nginx來幫助我處理虛擬主機、反向代理、負載平衡和服務器靜態內容)
所以在你的 Nginx 組態檔中,添加/更新以下位置/路由
## for backend or api and assuming backend is running on 3000 port on same server
location /api {
proxy_pass http://localhost:3000;
## Following lines required if you are using WebSocket,
## I usually add even not using WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
## for frontend and assuming frontend is running on 5000 port on same server
location / {
proxy_pass http://localhost:5000;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/314030.html
上一篇:AzureSynapsePipeline中的動態REST呼叫
下一篇:創建路徑以從陣列中獲取特定物件
