1.0.7 • Published 5 years ago

hapi-nosql-mongoose v1.0.7

Weekly downloads
9
License
BSD-3-Clause
Repository
github
Last release
5 years ago

Coverage Status Build Status

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

5 years ago

1.0.6

5 years ago

1.0.5

5 years ago

1.0.4

5 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

6 years ago

1.0.0

6 years ago