hapi-nosql-mongoose
v1.0.7
Published
Mongoose implementation for HapiJS
Downloads
13
Maintainers
Readme
hapi-nosql-mongoose
Mongoose plugin for HapiJS (v17+)
Installation
# npm
npm install hapi-nosql-mongoose mongoose
# yarn
yarn add hapi-nosql-mongoose mongoose
Register as Hapi Plugin
const Mongoose = require('hapi-nosql-mongoose');
const schemas = require('./my/mongoose/schemas');
await server.register({
plugin: Mongoose,
options: {
uri: 'mongodb://localhost:27017/database',
config: {...},
schemas: {...}
}
});
Options
- uri: a mongodb valid uri
- config: a javascript object with mongoose options
- schemas: a javascript object with mongoose schema definitions
Schema Definitions
For ease of use you can have a folder with all your schema definitions along an index.js
file that exports all the schemas inside the folder. e.g:
-- /my/mongoose/schemas/
|-- index.js
|-- post.js
|-- user.js
// Post schema (post.js)
'use strict';
const Schema = require('mongoose').Schema;
const Post = new Schema({
title: {
type: String,
trim: true
},
content: String,
authorId: {
type: String // referencing the User as you see fit
},
createdAt: {
type: Date,
'default': Date.now
}
});
module.exports = Post;
// User schema (user.js)
'use strict';
const Schema = require('mongoose').Schema;
const User = new Schema({
uuid: {
type: String,
'default': uuid.v4 // using an uuid library
},
name: {
type: String,
trim: true
},
lastName: {
type: String,
trim: true
},
createdAt: {
type: Date,
'default': Date.now
}
});
module.exports = User;
// Exporter (index.js)
'use strict';
const Post = require('./post');
const User = require('./user');
const schemas = {
Post,
User
};
module.exports = schemas
Server Decorations
This plugin decorates the server object, adding a method called mongoose:connector
that returns the full Connector object.
Use the Connector object to get your models in your controllers like this:
server.route({
method: 'GET',
path: '/posts',
handler: async (request, h) => {
const Post = request.server['mongoose:connector'].getModel('Post');
// More code below
}
});
Plugin Methods Exposed
- connection: This gives you access to the Mongoose Connection Object.
server.route({ method: 'GET', path: '/posts', handler: async (request, h) => { const MongooseConnection = request.server.plugins['hapi-nosql-mongoose'].connection; // More code below } });
- mongoose: This gives you access to the Mongoose Object.
server.route({ method: 'GET', path: '/posts', handler: async (request, h) => { const Mongoose = request.server.plugins['hapi-nosql-mongoose'].mongoose; // More code below } });