2017-08-11 27 views
0

我想了解一個MERN應用完全的作品,我一直在閱讀有關的MongoDB,ExpressJs,ReactJs和下的NodeJS與ReactJs一個應用程序API的NodeJS整合,我也瞭解MongoDB中,ExpressJs和NodeJs交互以及ReactJs是如何工作的,我的問題很簡單(我認爲)。如何同域

問題: 如果我創建了一個API,使用節點,快速和蒙戈,和我有一個應用程序管理的反應,都需要一臺服務器(通過快遞,我的理解),那麼,我應該怎麼運行的API和React應用程序。我需要不同的網址嗎?我應該配置不同的端口嗎?我應該如何整合它們?

我真的一直在閱讀很多東西,但幾乎每個教程都是在本地製作的(我在Passenger的服務器上工作,我無法改變它的啓動方式),僅用於Node/Express(帶有帕格或其他)/ Mongo或只是React,我不明白如何連接API和React。

感謝

+0

所以,我應該有API和React分開?至少在一個不同的子域?,是它設計的工作方式? –

回答

2

這取決於以下幾個因素:環境(例如開發,生產),並通過服務器的控制。對於開發,您可以擁有兩個不同的URL並使用Webpack Dev Server之類的內容。通常你會擁有模塊捆綁器,例如Webpack,注意你的React代碼的變化。但是,如果您有服務器端渲染,這可能會變得更加複雜。

對於生產,通常你會爲您的客戶端應用程序捆綁的文件已經優化和精縮。如果你可以改變你的API,你可以靜態地服務於它的新端點,例如:/static/bundle.js並從index.html文件,該文件將被Express.js服務器訪問/當發送請求該端點。

但是,因爲您可能希望在您的React應用中擁有路由,您的服務器需要知道如何處理客戶端應用路由(例如app.get('/*',() => ...)),並且它們可能會與您的API端點發生衝突。你可以:

  • 前綴與命名空間的API端點,如/api/v1/...
  • 放置在一個不同的URL,端口或子域的API在這種情況下,您確實需要並行運行這兩個服務器採用。 Node.js,有幫助者可以使這個更方便,例如concurrently
1

拉出您的疑慮:API,ReactIntegration對於MERN應用程序。

我用三種方法

1)使用foreman。有了這個,你可以在Procfile中指定你的API和Web客戶端。我用它here

2)使用代理來處理需要您的API請求。所以在package.json,您指定的API網址(API必須運行)

// package.json 
....... 
....... 
"proxy": "<path to url:[port no if you're developing locally]>" 

檢查here。 你可以簡單地添加一個腳本來運行你的APIReactconcurrently

3)設置你的API,並在碼頭工人的容器作出反應的應用程序。 mern-starter是一個完美的地方來檢查這一點。

希望這會有所幫助!