Security News
Input Validation Vulnerabilities Dominate MITRE's 2024 CWE Top 25 List
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
ah-sequelize-plugin
Advanced tools
This plugin will use the sequelize orm to create api.models
which contain your sequelize models.
Versions 1.0.0+
are only compatible with ActionHero versions 18.0.0+
.
For versions compatible with ActionHero versions prior to 18.0.0
, use version 0.9.0
.
npm install ah-sequelize-plugin --save
npm install sequelize --save
./config/plugins.js
:exports['default'] = {
plugins: (api) => {
return {
'ah-sequelize-plugin': { path: __dirname + '/../node_modules/ah-sequelize-plugin' }
}
}
}
npm install mysql2 --save
npm install sqlite3 --save
npm install --save pg pg-hstore
npm install --save tedious
For additional information on supported databases visit the Sequelize Docs.
npm install sequelize-fixtures --save
npm install --save-dev sequelize-cli
A ./config/sequelize.js
file will be created which will store your database configuration. Read commented sections of configuration file for examples of multi-environment configurations.
Use the exports form of sequelize models in ./models
with the file name matching that of the model, IE:
// from ./models/user.js
module.exports = function (sequelize, DataTypes, api) {
// Define model structure and options
const model = sequelize.define('user', {
id: {
type: DataTypes.INTEGER.UNSIGNED,
autoIncrement: true,
primaryKey: true
}
}, {
paranoid: true
})
// Attach Class methods
model.rehydrate = function (user) {
return this.build(user)
}
// Attach Instance methods
model.prototype.apiData = function () {
return {
id: this.id
}
}
return model
}
Models are loaded into api.models
, so the example above would be api.models.user
. These module.exports allow for a third optional parameter "api" which is the ActionHero API object. This can be used to access configs and initializer functions, among other things.
This plugin does not condone the use of Sequelize.sync()
in favor of migrations. Keep you migrations in ./migrations
and use the sequelize-cli to execute them.
An example migration to create a users
table would look like:
// from ./migrations/20140101000001-create-users.js
module.exports = {
up: async function (migration, DataTypes) {
await migration.createTable('users', {
id: {
type: DataTypes.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: DataTypes.STRING,
email: DataTypes.STRING,
phone: DataTypes.STRING,
passwordHash: DataTypes.TEXT,
passwordSalt: DataTypes.TEXT,
createdAt: DataTypes.DATE,
updatedAt: DataTypes.DATE
})
await migration.addIndex('users', ['email'], {
indexName: 'email_index',
indicesType: 'UNIQUE'
})
await migration.addIndex('users', ['name'], {
indexName: 'name_index',
indicesType: 'UNIQUE'
})
await migration.addIndex('users', ['phone'], {
indexName: 'phone_index',
indicesType: 'UNIQUE'
})
},
down: async function (migration, DataTypes) {
await migration.dropTable('users')
}
}
You can use the sequelize-cli to create and execute migrations.
api.sequelize.migrate
and api.sequelize.migrateUndo
are now based on Umzug, and are maintained for legacy purposes.
An Umzug instance is available at api.sequelize.umzug
, and should be used to perform (and undo) migrations programatically using the official API.
If you want to sync, you can api.sequelize.sequelize.sync()
or api.models.yourModel.sync()
;
By default, ah-sequelize-plugin
will automatically execute any pending migrations when Actionhero starts up. You can disable this behaviour by adding autoMigrate: false
to your sequelize config.
If you want to declare associations, best practice has you define an .associate()
class method in your model such as:
module.exports = function (sequelize, DataTypes, api) {
const model = sequelize.define('user', {
id: {
type: DataTypes.INTEGER.UNSIGNED,
autoIncrement: true,
primaryKey: true
}
})
model.associate = function (models) {
this.hasMany(models.email)
}
return model
}
Then you create an associations.js
initializer within your project which might look like this:
const ActionHero = require('actionhero')
const api = ActionHero.api
module.exports =
class AssociationsInitializer extends ActionHero.Initializer {
constructor () {
super()
this.name = 'associations'
this.loadPriority = 1000
this.startPriority = 1002
this.stopPriority = 1000
}
initialize () { }
start () {
Object.entries(api.models).filter(([k, m]) => typeof m.associate === 'function')
.forEach(([k, m]) => m.associate(api.models))
}
stop () { }
}
We use the sequelize-fixtures
package to load in JSON-defined fixtures in the test NODE_ENV. Store your fixtures in ./test/fixtures/*.json
or ./test/fixtures/*.yml
.
By default, ah-sequelize-plugin
will not automatically load your fixtures when Actionhero starts up. You can enable this behaviour by adding loadFixtures: true
to your sequelize config.
FAQs
Use Sequelize in ActionHero
The npm package ah-sequelize-plugin receives a total of 1,228 weekly downloads. As such, ah-sequelize-plugin popularity was classified as popular.
We found that ah-sequelize-plugin demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.
Research
Security News
A threat actor's playbook for exploiting the npm ecosystem was exposed on the dark web, detailing how to build a blockchain-powered botnet.