2016-08-05 215 views
0

我可以根據請求經歷哪個域來設置環境變量嗎?根據域,我可以在node.js中設置環境變量嗎?

我所想的是,我有我的Node.js應用程序運行起來,我給你兩個域,同一個域,不同的TLD:就像下面

mydomain.fr 
mydomain.de 

和做的事情像這樣的僞代碼

switch(app.host) { 
    case 'mydomain.fr': 
    process.env.LANGUAGE = 'fr'; 
    break; 

    case 'mydomain.de': 
    process.env.LANGUAGE = 'de'; 
    break; 

    default: 
    process.env.LANGUAGE = 'en'; 
    break; 
} 

我thinkg這樣做這種方式,因爲我真的很喜歡用一個節點模塊像i18n或類似,但使用相同的代碼庫,然後只在特定的JSON文件添加不同語言的變量。

如果我想在像意大利(.it)這樣的新國家或其他地方推出我的網站,這會讓我更容易。如果我推送更新到網站,它會自動推送到所有語言。

我的主要問題是現在的第一個問題:這可能嗎? 第二,這種方法的優點和特別缺點是什麼?我已經列出了一些專業人士,現在我唯一能想到的是,如果我將頁面設置在不同的服務器上,那麼一臺Web服務器需要比我需要的更大/更強大。

值得一提的是,在每種語言網站的流量是相當低(低於10K每月爲這兩種語言)

再次提及這可能是值得一提的是,我打算,如果這些網站部署到Heroku的這很重要。

回答

2

如果兩個域同時運行,它將無法工作。

node.js中的全局變量像process就是這樣的:global。如果您運行兩項服務(應用程序),會發生什麼情況是第一項將變量process.env.LANGUAGE設置爲某項,第二項將覆蓋它。

如果您按每個連接進行連接,它甚至不會起作用。來自法國的第一位客戶將設置process.env.LANGUAGEfr,然後來自德國的第二位客戶將其設置爲de,然後在您回覆第一位客戶(法語爲法語)時,您最終會以德文向他提供該頁面。

請記住,雖然node.js只是單線程,但我們仍然需要擔心多個連接,因爲它們可能是併發的。


的正確位置附上這樣的事情是可變的,你唯一獲得每個連接:請求對象和響應對象(通常簡稱爲reqres)。如果你想要一些標準的東西,用一箇中間件向請求對象添加一個僞頭。我個人只是做req.lang = 'de';

相關問題