ifnode-mongoose
Description
ifnode-mongoose
is a schema plugin which is specified for ifnode
and provide possibility to using mongoose
in ifnode
eco-system. Plugin does not around developer under some special features of mongoose
and it more like proxy.
Each ifnode
model (returned by app.Model
) is a abstraction under Mongoose.Schema
and Mongoose.Model
. ifnode-mongoose
get possibility to reuse any mongoose
plugins, validation and all other features.
Usage
Install module:
npm install ifnode-mongoose --save
API
ifnode
database connection config options
Name | Type | Description |
---|
- | string | Mongo connection uri. Read more on mongoose site |
config | Object: { uri, options } | Mongoose connect params. Read more on mongoose site (uri - first argument of mongoose.connect(uri, options) , options - second argument of mongoose.connect(uri, options) ); |
- | function | Adds possibility to create own connection. Useful for multiplied mongo connections |
Database connection examples
By string
module.exports = {
db: {
my_mongo_database: {
schema: 'mongoose',
config: 'mongodb://root:123@localhost:27017/db'
}
}
};
By Object
module.exports = {
db: {
my_mongo_database: {
schema: 'mongoose',
config: {
uri: 'mongodb://localhost:27017/db',
options: {
user: 'root',
pass: '123'
}
}
}
}
};
By function
module.exports = {
db: {
my_mongo_database: {
schema: 'mongoose',
config(Mongoose) {
Mongoose.set('debug', true);
Mongoose.Promise = Promise;
return Mongoose.createConnection('mongodb://localhost:27017/db', {
user: 'root',
pass: '123'
});
}
}
}
};
Combined connections
module.exports = {
db: {
connection1: {
schema: 'mongoose',
config: 'mongodb://root:123@localhost:27017/somedb1'
},
connection2: {
schema: 'mongoose',
config: {
uri: 'mongodb://localhost:27017/somedb2',
options: {
user: 'root',
pass: '123'
}
}
},
connection3: {
schema: 'mongoose',
config(Mongoose) {
return Mongoose.createConnection('mongodb://localhost:27018/db', {
mongos: true
});
}
}
}
};
Creating ifnode
models options
const app = require('ifnode')();
const UsersModel = app.Model(
model_options,
db_options
);
model_options
(required)
Name | Optional | Description |
---|
collection | false | Name of collection |
name | true | Name for attaching to ifnode 's application models property (default is collection option) |
columns | true | Mongoose Schema columns. Rules for create check here |
config | true | Mongoose Schema options. List check here |
db_options
(optional)
Name | Description |
---|
db | Which of database configuration need use (from app.config.db ). Default: first in app.config.db |
alias | Model`s alias (in app.models) |
Model instance properties
Properties
Methods
Name | Description |
---|
.schema() | Return mongoose Schema (new Mongoose.Schema ) instance (result of new Mongoose.Schema ) |
.model() | Return mongoose Nodel (result of Mongoose.createConnection().Model ) |
Example of usage in project
config
// config/dev.js
module.exports = {
db: {
customers_db: {
schema: 'mongoose',
config: 'mongodb://localhost/customers'
},
events_db: {
schema: 'mongoose',
config: 'mongodb://localhost/events'
}
}
}
models
// customers.js
const app = require('ifnode')();
const CustomersModel = app.Model({
collection: 'customers',
config: {
strict: false
}
}, {
db: 'customers_db',
alias: 'UsersModel'
});
const originalCustomersModel = CustomersModel.model();
originalCustomersModel.schema.path('name').validate(
name => /[0-9]/i.test(name),
'Invalid name'
);
CustomersModel.statics.findByEmail = function(email) {
return this.find({ email });
};
// customers.js
const app = require('ifnode')();
const EventsModel = app.Model({
name: 'EventsModel',
collection: 'events',
columns: {
id: {
type: String,
index: true,
unique: true
},
type: String
}
}, {
db: 'events_db'
});
EventsModel.statics.pushEvent = function(event) {
return this.create(event);
};
// app.js
const IFNode = require('ifnode');
const app = IFNode({
environment: 'dev'
});
app.load();
app.models.UsersModel.findByEmail('test@email.com').then(users => {
/* do smt */
});
app.models.EventsModel.pushEvent({
type: 'logsmt'
});