microservice/multitenant
express middleware for multitenant achitecture
Usage:
var express = require('express');
var multitenant = require('multitenant');
var app = express();
app.use(multitenant({...}));
Options
tenants (mandatory)
It can be an object or a function, and in both case should provide the information relative to a given tenant.
The object's keys has to be the same as the tenant's ID.
tenants: {
foo: {...},
bar: {...}
}
The function is has a tenant ID and a callback as arguments.
tenants: function(tenantId, done) {
var tenantInformation = getTenantInformation(tenantId);
done(tenantInfomation);
}
tenantId (optional)
Function which parses the request object and provides a callback with the tenantId. It defaults to the subdomain.
tenantId: function(request, done) {
var tenantId = extractTenantIdFromRequest(request);
done(tenantId);
}
onNotFound (optional)
Called when the tenant cannot be found with the given tenantId. It is the last function of the middleware chain. By default it sends a 400 error
onNotFound: function(request, response, next) {
response.send('some error message');
}
onNoTenantKey (optional)
Called when the tenantId cannot be determined. It is the last function of the middleware chain. By default it sends a 400 error
onNoTenantKey: function(request, response, next) {
response.send('some error message');
}
connectionStrategy (optional)
This is where you initialize a connection to a database. It takes two arguments: the tenant information object, and a callback. Arguments provided to the callback will be assigned to request.tenantConnection
.
connectionStrategy: function(tenantInformation, done) {
var connection = initializeDatabaseConnection(tenantInformation);
done(connection);
}
Alternatively, it can be an object whose values are either functions or values, which are assigned to the req
object using their respective key.
connectionStrategy: {
foo: 'bar',
baz: function(tenant, callback) {
callback(null, 'baz');
}
}