2017-02-20 44 views
0

我一直在尋找了幾天和解決方案,現在正試圖谷歌這一切,現在我在這裏。我正在嘗試使用express-subdomain軟件包爲我的應用程序設置子域。然而,在下面的例子中,應用程序總是返回app.get路由並跳過指定的其他子域路由。 我也反過來增加了hosts文件的URL,所以我知道不應該成爲問題。快速子域路由不正常工作?

它必須是在我的代碼由於某種原因,它最終總是顯示即使檢測區域航線訪問oce.localhost時:3000。

請幫我:)

Server.js

var subdomain = require('express-subdomain'); 
var express = require('express'); 
var app = express(); 

// Region routes 
var router = express.Router(); 
var na = require('./routes/region/na.js'); 
var oce = require('./routes/region/oce.js'); 

router.use(subdomain('na.localhost', na)); 
router.use(subdomain('oce.localhost', oce)); 

app.get('/', function(req, res) { 
    res.send('Detect Region and send to correct subdomain!'); 
}); 

app.listen(3000); 

路線/區域/ oce.js

var 
    express = require('express'), 
    router = express.Router(); 

router.get('/', function(req, res) { 
    res.send('Your are in OCE Region!'); 
}); 

module.exports = router; 

而且na.js是相當多的名稱oce.js

Cheers

回答

1

你設置你的子域在router變量,但你不告訴你的應用程序來使用它。

你要做的是:

app.use(router); 

你把它放在你的地方目前app.get的。


編輯

你也可以把你的app.getapp.use(router)後,使其作爲默認的路由行爲。一些測試

好吧,我已經能夠使它工作使用express-vhost後(當你既不ocena,它將使用它)


編輯。我剛剛更新了你的server.js像這樣:

var subdomain = require('express-vhost'); 
var express = require('express'); 
var app = express(); 

// Region routes 
var router = express.Router(); 
var na = require('./routes/region/na.js'); 
var oce = require('./routes/region/oce.js'); 

subdomain.register('na.localhost', na) 
subdomain.register('oce.localhost', oce) 

app.use(subdomain.vhost(app.enabled('trust proxy'))); 

app.get('/', function(req, res) { 
    res.send('Detect Region and send to correct subdomain!'); 
}); 

app.listen(3000); 
+0

好吧甚至補充說,它仍然有同樣的問題後。它似乎總是最終轉到默認路線。 – Elevant

+0

我幾乎想知道包是否有問題,但我不知道,也許我必須使用另一個包,如虛擬主機,除非我不想分開到單獨的文件夾它應該都只是一個應用程序。你推薦任何? – Elevant

+0

我用'vhost',這是罰款我的需要。但是你的問題似乎很奇怪,我會盡可能地再看看它,並讓你知道。 – Telokis