hapi-mongoose2
Mongoose plugin for hapi-based servers. Supports connecting to one or multiple databases and look up and register models by connection. The plugin options are:
options
- a connection
or an array of connection
s where:
connection
- an object containing:
uri
- a mongo uri stringalias
- (optional) a database name alias used to namespace connections when multiple are created. otherwise ignored.loadSchemasFrom
- (optional) one of:
- An array of globs from where schemas will be loaded. matching files must export a
mongoose.Schema
object or a function with the signature async function(server)
returning a schema. - An object containing
Mongoose.Schema
elements.
options
- (optional) options passed to mongoose
createConnection method. unknown properties are allowed:
auth
- an object with auth credentials
autoIndex
bufferCommands
connections
- an array of connection
objects as described above.decorations
- (optional) an array of interfaces to be decorated using server.decorate
method. allowed values are server
, request
.
Connection and models are accessible under the server.app.mongo
property. When multiple connections are created the database name or alias
is used as namespace for accessing each database properties. Same applies for decorated interfaces.
Models are named as the filename matching the schema pattern. Model name first letter is capitalized by default. e.g. Animal
.
Example
const plugin = {
plugin: require('hapi-mongoose2'),
options: {
connections: [
{
uri: 'mongodb://localhost:27017/myapp'
},
{
alias: 'safebox',
uri: 'mongodb://localhost:27017/secrets',
loadSchemasFrom: [
'src/schemas',
'!.{md,json}'
],
options: {
auth: {
user: 'admin',
password: 'pa55w0rd'
},
autoIndex: false,
bufferCommands: true
}
}
],
decorations: ['request', 'server']
}
};
const server = new Hapi.server();
await server.register(plugin);
const { Admin } = server.app.mongo.safebox.models;
await Admin.create({ name: 'Quentin', last: 'Tarantino' });
server.route({
method: 'GET',
path: '/',
handler: function (request) {
const { Admin } = request.mongo.safebox.models;
return Admin.findOne({ name: 'Quentin' }).exec();
}
});
await server.mongo.safebox.connection.close();
Dependencies
mongoose
needs to be installed alongside this plugin in order to work.