vhost Middleware

Installieren

Terminal window
$ npm install vhost

API

var vhost = require('vhost');

vhost(Hostname, Handle)

Erstelle eine neue Middleware-Funktion, um die Anfrage an handle zu übergeben, wenn der eingehende Host für die Anfrage mit hostname übereinstimmt. Die Funktion wird wie eine Standard-Middleware als handle(req, res, next) aufgerufen.

hostname kann ein String oder ein RegExp-Objekt sein. Wenn hostname ein String ist, kann es * enthalten, um 1 oder mehr Zeichen in diesem Abschnitt des Hostnamens zu finden. 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.

Wenn der Host übereinstimmt und die Anfrage an einen vhost handler gesendet wird, wird die Eigenschaft req.vhost mit einem Objekt gefüllt. Dieses Objekt wird numerische Eigenschaften haben, die zu jedem Platzhalter (oder Capture-Gruppe, wenn RegExp-Objekt zur Verfügung gestellt wurde) und dem übereinstimmenden hostname haben.

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

Beispiele

mit Verbindung für statische Servierung verwenden

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

mit Verbindung für Benutzer-Subdomains verwenden

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

mit jedem generischen Anfrage-Handler verwenden

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

Lizenz

MIT