Как настроить несколько поддоменов в Express.js или Connect.js
Я привык работать с httpd (Apache), который предоставляет способ настройки поддоменов, сопоставленных с каталогом.
Как я могу сделать то же самое в Connect.js/Express.js? Я вижу, что единственное, что у меня есть, это маршруты, которые я не уверен, как я могу использовать для настройки поддоменов. У меня есть субдомены, такие как m.mysite.com, sync.mysite.com
Может кто-нибудь помочь?
Ответы
Ответ 1
Или, альтернативно, вы можете использовать vhost
.
Затем создайте несколько сайтов в своем собственном каталоге и экспортируйте экспресс-приложение, например. /path/to/m/index.js
:
var app = express()
/* whatever configuration code */
exports.app = app
// There is no need for .listen()
Затем обработайте все запросы в следующем приложении:
var vhost = require('vhost');
express()
.use(vhost('m.mysite.com', require('/path/to/m').app))
.use(vhost('sync.mysite.com', require('/path/to/sync').app))
.listen(80)
Обратите внимание, что /path/to/m
и /path/to/sync
могут быть абсолютными путями (как указано выше) или относительными путями.
Ответ 2
Вы можете добавить субдомен к запросу, а затем проверить его в последующих вызовах next()
.
Я получил следующий код от > http://groups.google.com/group/express-js/browse_thread/thread/b04bbaea7f0e8eed (так что полный кредит оригинальному автору)
app.get('*', function(req, res, next){
if(req.headers.host == 'some.sub.domain.com') //if it a sub-domain
req.url = '/mysubdomain' + req.url; //append some text yourself
next();
});
// This will mean that all get requests that come from the subdomain will get
// /subdomain appended to them, so then you can have routes like this
app.get('/blogposts', function(){
// for non-subdomain
});
app.get('/mysubdomain/blogposts', function(){
// for subdomain
});
Ответ 3
Недавно я столкнулся с этой проблемой и написал модуль, чтобы помочь с ним, используя express 4. https://www.npmjs.org/package/express-subdomain.
Пример - субдомен api.
var express = require('express');
var app = express();
var router = express.Router();
//api specific routes
router.get('/', function(req, res) {
res.send('Welcome to our API!');
});
router.get('/users', function(req, res) {
res.json([
{ name: "Brian" }
]);
});
app.use(subdomain('api', router));
app.listen(3000);
Проверьте модуль на npm, чтобы увидеть больше примеров.
Ответ 4
Я создал модуль для помощи с субдоменами в Express: https://github.com/WilsonPage/express-subdomain-handler
Ответ 5
попробуйте этот шаблон
https://github.com/sabasm/express-vhost
я сделал домен и поддомен, работающий для другого ответа SO