Skip to content

Instantly share code, notes, and snippets.

@ethanliew
Forked from suissa/beerSchema.js
Created December 12, 2019 07:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ethanliew/24a649262eebea15388225ee35903d8b to your computer and use it in GitHub Desktop.
Save ethanliew/24a649262eebea15388225ee35903d8b to your computer and use it in GitHub Desktop.
Creating models dynamically
var mongoose = require('mongoose');
var BeerSchema = new mongoose.Schema({
id: { type: Number, min: 0},
name: { type: String, default: '' },
description: { type: String, default: '' },
abv: { type: Number, min: 0},
category: { type: String, default: ''},
created_at: { type: Date, default: Date.now },
updated_at: { type: Date, default: Date.now }
});
exports.BeerSchema = BeerSchema;
// Bring Mongoose into the app
var mongoose = require( 'mongoose' );
// Build the connection string
var dbURI = 'mongodb://localhost/mongoose-best-practices';
// Create the database connection
mongoose.connect(dbURI);
// CONNECTION EVENTS
// When successfully connected
mongoose.connection.on('connected', function () {
console.log('Mongoose default connection open to ' + dbURI);
});
// If the connection throws an error
mongoose.connection.on('error',function (err) {
console.log('Mongoose default connection error: ' + err);
});
// When the connection is disconnected
mongoose.connection.on('disconnected', function () {
console.log('Mongoose default connection disconnected');
});
// When the connection is open
mongoose.connection.on('open', function () {
console.log('Mongoose default connection is open');
});
// If the Node process ends, close the Mongoose connection
process.on('SIGINT', function() {
mongoose.connection.close(function () {
console.log('Mongoose default connection disconnected through app termination');
process.exit(0);
});
});
// BRING IN YOUR SCHEMAS & MODELS
require('models/indexSchemas');
// Dependencies
var fs = require('fs')
, inflection = require('inflection')
, mongoose = require('mongoose');
// Lookup models directory
fs.readdirSync(__dirname).forEach(function (file){
var filePath = __dirname + '/models/' + file;
// Match all .js files but this
if (fs.statSync(filePath).isFile() && file != 'index.js' && /.*.js/.test(file)) {
// Inflect the model name
var modelName = inflection.camelize(file.replace('.js', '').replace('-', '_'));
// Load the model
var modelSchema = require(filePath)[modelName + 'Schema'];
if (typeof modelSchema != 'undefined') {
mongoose.model(modelName, modelSchema);
console.log('Loaded model "%s" from file "%s"', modelName, file);
}
else {
console.error('Schema for model "%s" not found in file "%s"', modelName, file);
}
};
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment