Hapi Water
A hapi plugin for waterline. This plugin replicates waterline usage in sails by:
- Allowing you to define waterline models exactly as in sails
- Use any sails waterline adapter
- Gives you access to your models anywhere in the request cycle through the request toolkit (
h.modelName._
)
Usage
// Setup
const hapiWater = require('hapi-water')
const options = {
adapter: require('sails-mysql'),
adapterType: 'mysql',
database: {
name: 'myDb',
user: 'user',
password: 'password',
host: 'localhost'
},
modelPath: path.join(__dirname, './models'),
modelDefaults: {
datastore: 'default',
fetchRecordsOnCreate: true,
fetchRecordsOnUpdate: true,
primaryKey: 'id',
attributes: {
createdAt: { type: 'string', autoCreatedAt: true, },
updatedAt: { type: 'string', autoUpdatedAt: true, },
id: { type: 'number', autoMigrations: { autoIncrement: true } },
},
}
}
await server.register({ plugin: hapiWater, options }, { once: true })
// Usage in handler
const pets = await h.models.pet.find()
Model definition
// ./model/Pet.js
module.exports = {
identity: 'pet',
attributes: {
name: { type: 'string' },
}
}
Options
- adapter: Any of sail's available adapters
- adapterType: The name of adapter, example: 'mysql', 'sails-disk', etc
- database:
- name: The database name
- user: The database user
- password: The database password (optional)
- host: The database host
- port: The database port (optional)
- modelPath: Path to the directory where your models are defined.
- modelDefaults: Object. Any model settings that will apply to all models.
- Great for setting default primaryKey, datastore, fetchRecordsOnUpdate, fetchRecordsOnCreate
- Will be overridden by specific model settings
Contributing
Pull requests or issues welcome!