Created
September 9, 2014 21:50
-
-
Save juanpasolano/5c7596d8629eeeb8debd to your computer and use it in GitHub Desktop.
seed database on sails js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Locations.js | |
* | |
* @description :: TODO: You might write a short summary of how this model works and what it represents here. | |
* @docs :: http://sailsjs.org/#!documentation/models | |
*/ | |
module.exports = { | |
seedData:[ | |
{ | |
country: 'Australia', | |
states: ['Brisbane', 'Perth', 'Sydney'] | |
} | |
] | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Bootstrap | |
* (sails.config.bootstrap) | |
* | |
* An asynchronous bootstrap function that runs before your Sails app gets lifted. | |
* This gives you an opportunity to set up your data model, run jobs, or perform some special logic. | |
* | |
* For more information on bootstrapping your app, check out: | |
* http://sailsjs.org/#/documentation/reference/sails.config/sails.config.bootstrap.html | |
*/ | |
module.exports.bootstrap = function(cb) { | |
async.series([ | |
Locations.seed | |
],cb); | |
// It's very important to trigger this callback method when you are finished | |
// with the bootstrap! (otherwise your server will never lift, since it's waiting on the bootstrap) | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Default model configuration | |
* (sails.config.models) | |
* | |
* Unless you override them, the following properties will be included | |
* in each of your models. | |
* | |
* For more info on Sails models, see: | |
* http://sailsjs.org/#/documentation/concepts/ORM | |
*/ | |
module.exports.models = { | |
/*************************************************************************** | |
* * | |
* Your app's default connection. i.e. the name of one of your app's * | |
* connections (see `config/connections.js`) * | |
* * | |
***************************************************************************/ | |
connection: 'someMongodbServer', | |
/*************************************************************************** | |
* * | |
* How and whether Sails will attempt to automatically rebuild the * | |
* tables/collections/etc. in your schema. * | |
* * | |
* See http://sailsjs.org/#/documentation/concepts/ORM/model-settings.html * | |
* * | |
***************************************************************************/ | |
migrate: 'alter', | |
/** | |
* This method adds records to the database | |
* | |
* To use add a variable 'seedData' in your model and call the | |
* method in the bootstrap.js file | |
*/ | |
seed: function (callback) { | |
var self = this; | |
var modelName = self.adapter.identity.charAt(0).toUpperCase() + self.adapter.identity.slice(1); | |
if (!self.seedData) { | |
sails.log.debug('No data avaliable to seed ' + modelName); | |
callback(); | |
return; | |
} | |
self.count().exec(function (err, count) { | |
if (!err && count === 0) { | |
sails.log.debug('Seeding ' + modelName + '...'); | |
if (self.seedData instanceof Array) { | |
self.seedArray(callback); | |
}else{ | |
self.seedObject(callback); | |
} | |
} else { | |
sails.log.debug(modelName + ' had models, so no seed needed'); | |
callback(); | |
} | |
}); | |
}, | |
seedArray: function (callback) { | |
var self = this; | |
var modelName = self.adapter.identity.charAt(0).toUpperCase() + self.adapter.identity.slice(1); | |
self.createEach(self.seedData).exec(function (err, results) { | |
if (err) { | |
sails.log.debug(err); | |
callback(); | |
} else { | |
sails.log.debug(modelName + ' seed planted'); | |
callback(); | |
} | |
}); | |
}, | |
seedObject: function (callback) { | |
var self = this; | |
var modelName = self.adapter.identity.charAt(0).toUpperCase() + self.adapter.identity.slice(1); | |
self.create(self.seedData).exec(function (err, results) { | |
if (err) { | |
sails.log.debug(err); | |
callback(); | |
} else { | |
sails.log.debug(modelName + ' seed planted'); | |
callback(); | |
} | |
}); | |
} | |
}; |
This is how I execute the sails seed task
Hey,
in sails v1 self.adapter
is undefined.
How would associations work? For example, if I had another model called "Continents" and wanted to associate the Australia with a continent called Australia from a model called api/models/continents.js?
Anyone could run this seed on sails 1.0 or 1.1 ?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I was going to write a small app to do this and call it in bootstrap, this seems much better because the seed data is defined right in the model.