web-dev-qa-db-ja.com

Express.jsまたはConnect.jsで複数のサブドメインを構成するにはどうすればよいですか

私は、ディレクトリにマッピングされるサブドメインを設定する方法を提供するhttpd(Apache)での作業に慣れています。 Connect.js/Express.jsで同じことを行うにはどうすればよいですか?私が持っている唯一のものは、サブドメインを設定するためにどのように使用できるかわからないルートです。 m.mysite.com、sync.mysite.comなどのサブドメインがあります

誰か助けてもらえますか?

51
Raks

または、代わりに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は、上記の絶対パスまたは相対パスです。

115
Adrien

リクエストにサブドメインを追加して、その後の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's 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 
});
18
neebz

私は最近この問題に遭遇し、エクスプレス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のモジュールをチェックして、他の例を確認してください。

14
bmullan91

Expressのサブドメインを支援するモジュールを作成しました: https://github.com/WilsonPage/express-subdomain-handler

6
wilsonpage