vhost ミドルウェア
インストール
$ npm install vhostAPI
var vhost = require('vhost');vhost(hostname, handle)
リクエストの
ホストがhostnameと一致する場合、handleにリクエストを渡すための新しいミドルウェア関数を作成します。 関数は、標準のミドルウェアのように、
handle(req, res, next)と呼ばれます。
hostnameは文字列またはRegExpオブジェクトを使用できます。 When hostname is a string it can
contain * to match 1 or more characters in that section of the hostname. When
hostname is a RegExp, it will be forced to case-insensitive (since hostnames are)
and will be forced to match based on the start and end of the hostname.
ホストが一致し、リクエストが vhost ハンドラに送信されると、req.vhost
プロパティにオブジェクトが入力されます。 このオブジェクトには、各ワイルドカードに対応する数値プロパティ
があります(RegExp オブジェクトが指定されている場合はグループをキャプチャします)。
hostname に一致します。
var connect = require('connect');var vhost = require('vhost');var app = connect();
app.use( vhost('*.*.example.com', function handle(req, res, next) { // for match of "foo.bar.example.com:8080" against "*.*.example.com": console.dir(req.vhost.host); // => 'foo.bar.example.com:8080' console.dir(req.vhost.hostname); // => 'foo.bar.example.com' console.dir(req.vhost.length); // => 2 console.dir(req.vhost[0]); // => 'foo' console.dir(req.vhost[1]); // => 'bar' }));例
connect を使って静的なサービスを提供することで
var connect = require('connect');var serveStatic = require('serve-static');var vhost = require('vhost');
var mailapp = connect();
// add middlewares to mailapp for mail.example.com
// create app to serve static files on subdomainvar staticapp = connect();staticapp.use(serveStatic('public'));
// create main appvar app = connect();
// add vhost routing to main app for mailapp.use(vhost('mail.example.com', mailapp));
// route static assets for "assets-*" subdomain to get// around max host connections limit on browsersapp.use(vhost('assets-*.example.com', staticapp));
// add middlewares and main usage to app
app.listen(3000);Using with connect for user subdomain
var connect = require('connect');var serveStatic = require('serve-static');var vhost = require('vhost');
var mainapp = connect();
// add middlewares to mainapp for the main web site
// create app that will server user content from public/{username}/var userapp = connect();
userapp.use(function (req, res, next) { var username = req.vhost[0]; // username is the "*"
// pretend request was for /{username}/* for file serving req.originalUrl = req.url; req.url = '/' + username + req.url;
next();});userapp.use(serveStatic('public'));
// create main appvar app = connect();
// add vhost routing for main appapp.use(vhost('userpages.local', mainapp));app.use(vhost('www.userpages.local', mainapp));
// listen on all subdomains for user pagesapp.use(vhost('*.userpages.local', userapp));
app.listen(3000);どんな一般的なリクエストハンドラでも使うこと
var connect = require('connect');var http = require('http');var vhost = require('vhost');
// create main appvar app = connect();
app.use( vhost('mail.example.com', function (req, res) { // handle req + res belonging to mail.example.com res.setHeader('Content-Type', 'text/plain'); res.end('hello from mail!'); }));
// an external api server in any frameworkvar httpServer = http.createServer(function (req, res) { res.setHeader('Content-Type', 'text/plain'); res.end('hello from the api!');});
app.use( vhost('api.example.com', function (req, res) { // handle req + res belonging to api.example.com // pass the request to a standard Node.js HTTP server httpServer.emit('request', req, res); }));
app.listen(3000);