vhost middleware

Installer

Terminal window
$ npm install vhost

API

var vhost = require('vhost');

vhost(nom d’hôte, handle)

Crée une nouvelle fonction middleware pour transmettre la requête à handle lorsque l’hôte entrant pour la requête correspond à hostname. La fonction est appelée comme handle(req, res, next), comme un middleware standard.

hostname peut être une chaîne de caractères ou un objet RegExp. Quand hostname est une chaîne, il peut contenir * pour faire correspondre 1 ou plus de caractères dans cette section du nom d’hôte. 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.

Lorsque l’hôte est trouvé et que la requête est envoyée à un gestionnaire de serveur virtuel, la propriété req.vhost sera remplie avec un objet. Cet objet aura des propriétés numériques correspondant à chaque joker (ou groupe de capture si l’objet RegExp est fourni) et le hostname qui a été trouvé.

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'
})
);

Exemples

utilisation avec connexion pour le service statique

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 subdomain
var staticapp = connect();
staticapp.use(serveStatic('public'));
// create main app
var app = connect();
// add vhost routing to main app for mail
app.use(vhost('mail.example.com', mailapp));
// route static assets for "assets-*" subdomain to get
// around max host connections limit on browsers
app.use(vhost('assets-*.example.com', staticapp));
// add middlewares and main usage to app
app.listen(3000);

en utilisant la connexion pour les sous-domaines utilisateur

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 app
var app = connect();
// add vhost routing for main app
app.use(vhost('userpages.local', mainapp));
app.use(vhost('www.userpages.local', mainapp));
// listen on all subdomains for user pages
app.use(vhost('*.userpages.local', userapp));
app.listen(3000);

en utilisant avec n’importe quel gestionnaire de requête générique

var connect = require('connect');
var http = require('http');
var vhost = require('vhost');
// create main app
var 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 framework
var 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);

Licence

MIT