express-mongoose-helper

1.0.11 • Public • Published

express-mongoose-helper

adds app.model() function and app.model[ModelName] to express.

install


npm install --save express-mongoose-helper

basic info


module signature

    function( 
        Express.Application app, //the express application
        Object options //options for usage with the library. see options below.
    )

app.model function signature

for legacy reasons, schemaOptions and callback may be given in either order, or not at all.

    app.model( 
        String name, //name of the model
        Object schema, //plain object defining a mongoose schema.
        Object schemaOptions, // optional schemaOptions to pass to the mongoose schema constructor
        Function callback //optional a function callback that receives the generated mongoose schema. for adding indexes, static methods, instance methods, plugins to model.
    )

model file signature (Note: you can edit what is injected to the required module, these are the defaults.)

each model file should export a function of the following signature.

    function(
        Express.Application app, //the Express app
        mongoose.Schema.Types Types,//the mongoose.Schema.Types object for convenience/brevity.
    )

basic usage

app.js

 
var app = require('express')(); // 1. include express
 
require('express-mongoose-helper')(app,{
    path: __dirname + '/models/',
    connectionString: 'mongodb://localhost/test',
    debug: true
});
 
//if you want to load your controllers,start your app, any other action requiring the models to be loaded/defined
// you may listen for the 'mongoose.models.ready' event like so:
app.on('mongoose.models.ready',function(){
 
    // your models are now available on the express app
    const dog = new app.model.Dog({
        name: 'Rowdy',
        owner: null
    });
 
    dog.save().then(dog=>{
        console.log(dog.name); // Rowdy
    })
    
    //load your controllers here, so that models are available.
    
    app.listen(3000);//start up our server
    
});

models/User.js

//an example mongoose model in express-mongoose-helper
//your module should export a function like so.
//you can customize which arguments are injected, the defaults are shown below.
module.exports = function( app, Types ){
 
    //creates a mongoose model named user and adds it to the express app.
    app.model('User',{
        name: {
            first: String,
            middle: String,
            last: String,
        },
        email: String,
        referredBy: { type: Types.ObjectId, ref: 'User', default: null }
    },function(schema){
        //here you can add indexes, static methods, instance methods, plugins etc to the schema.
        schema.index({ email: 1},{unique: true});
    });
    
    // now you can access the model like `app.model.User` from your controllers.
 
};

new in version 1.0.7:

  • module exports a function called standalone for creating a standalone instance without express, useful for background scripts or with other server environments
  • when constructing models with app.model() the model will now be returned. the model will also contain a function you can use to get the mongoose instance.
  • callback to app.model() will now receive mongoose as a second argument in addition to schema.

new standalone feature

 
const {standalone} = require('express-mongoose-helper');
 
const app = standalone({
    path: __dirname + '/models/',
    connectionString: 'mongodb://localhost/your-db',
    debug: true
});
 
app.on('mongoose.models.ready',function(){
    
    // your backend code here
    
});
 

changes to app.model

const model = app.model('Test',{foo:String},(schema,mongoose)=>{
    //modify the schema here
    //you can use mongoose here too
});
const mongoose = model.mongoose();// do something with mongoose

new in version 1.0.2, app.model supports a 4th parameter, schemaOptions

please note, to avoid breaking backwards compatability schemaOptions and callback can be given in either order. both are optional.

module.exports = function( app, Types ){
    
    app.model('UploadedFile',{
        path: String,
        owner: { type: Types.ObjectId, ref: 'User' },
        mimetype: String,
        filesize: Number,
    }, { timestamps: true },function(schema){
    
        schema.index({ filesize: 1 });
    
    });
 
};

options


//default options
options = {
    connectionString: '',// mongodb connection string
    connectionOptions: {},// mongodb connection options
    path: '',// path to folder containing models
    inject: ['app','types'], //arguments to inject into each required model
    debug: false, //show log messages
    log: function(){
        return this.debug && console.log.apply(console,arguments);
    }, //default logging function, can be changed
    extend: function(mongoose){} //extend mongoose with global plugins, custom types, etc.
};

events


several events are emitted. they are listed below.

  • mongoose.models.ready = emitted when all the model files have been loaded and added to the app.
  • mongoose.connected = emitted when database connection is established.
  • mongoose.disconnected = emitted when database is disconnected.
  • mongoose.error = emitted when an error occurs establishing connection to mongodb.

testing


No testing is done yet.

Package Sidebar

Install

npm i express-mongoose-helper

Weekly Downloads

3

Version

1.0.11

License

MIT

Unpacked Size

14.3 kB

Total Files

8

Last publish

Collaborators

  • gmorris_89