📦 Sequelize.js Trailpack http://sequelizejs.com
Loads Application Models (in api/models
) into the Sequelize ORM; Integrates with trailpack-router to
generate Footprints for routes.
// config/main.js
module.exports = {
// ...
packs: [
require('trailpack-sequelize')
]
}
A basic config/database.js
can be found here : https://github.com/trailsjs/trailpack-sequelize/blob/master/archetype/config/database.js
module.exports = class User extends Model {
//More about supported schema here : http://docs.sequelizejs.com/en/latest/docs/models-definition/
static schema (app, Sequelize) {
return {
name: { type: Sequelize.STRING, allowNull: false },
password: Sequelize.STRING,
displayName: Sequelize.STRING
}
}
static config (app, Sequelize) {
return {
migrate: 'drop', //override default models configurations if needed
store: 'sqlite', //override default models configurations if needed
//More informations about supported models options here : http://docs.sequelizejs.com/en/latest/docs/models-definition/#configuration
options: {
classMethods: {
//If you need associations, put them here
associate: (models) => {
//More information about associations here : http://docs.sequelizejs.com/en/latest/docs/associations/
models.User.hasMany(models.Role, {
as: 'roles',
onDelete: 'CASCADE',
foreignKey: {
allowNull: true
}
})
}
}
}
}
}
}
// api/services/UserService.js
module.exports = class UserService extends Service {
/**
* Finds people with the given email.
* @return Promise
* @example {
* name: 'Ludwig Beethoven',
* email: 'someemail@email.com',
* favoriteColors: [
* { name: 'yellow', hex: 'ffff00' },
* { name: 'black', hex: '000000' }
* ]
* }
*/
findUser (email) {
//More info about queries here : http://docs.sequelizejs.com/en/latest/docs/models-usage/
return this.app.orm.User.find({ where: {email: email} })
}
}
For more informations about sequelize queries, please look at the official documentation
Some options can be provide as query param for the find
method, example GET /api/v1/user
.
You can add /api/v1/user?populate=all
to populate all associations or use /api/v1/user?populate=field1,field2
to populate only some association.
By settings offset
and limit
you can do some pagination, example /api/v1/user?offset=10&limit=10
will return only 10 items started from 10 (id 10 to 20).
We love contributions! Please check out our Contributor's Guide for more information on how our projects are organized and how to get started.