2017-02-20 5 views
0

Я искал решения в течение пары дней, пытаясь сделать это и все, и теперь я здесь. Я пытаюсь настроить субдомены для моего приложения, используя пакет express-subdomain. Однако в приведенном ниже примере приложение ALWAYS возвращает маршрут app.get и пропускает другие указанные поддомены. Я также, в свою очередь, добавил URL-адрес файла hosts, поэтому я знаю, что это не должно быть проблемой.Маршрутизация Express-subdomain работает неправильно?

Должно быть, в моем коде по какой-то причине он всегда заканчивается показом маршрута определения области, даже при доступе к 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.get после app.use(router) так, что он будет действовать в качестве маршрута по умолчанию. (Если вы не являетесь ни на oce или na, он будет использовать его)


Редактировать после некоторого тестирования

Alright Я был в состоянии сделать его работу с помощью express-vhost. Я только что обновил ваш 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

Мне почти интересно, есть ли у пакета проблемы с ним, но я не знаю, может быть, мне нужно использовать другой пакет, например, vhost, за исключением того, что я не хочу разделиться на отдельные папки, все это должно быть всего лишь одно приложение. Вы что-нибудь рекомендуете? – Elevant

+0

Я использовал 'vhost', и это было хорошо для моих нужд. Но твоя проблема кажется странной, я еще раз посмотрю на нее, когда смогу, и дам тебе знать. – Telokis