Skip to content
This repository has been archived by the owner on May 2, 2021. It is now read-only.

confidence/glue support #64

Closed
kenhowardpdx opened this issue Oct 21, 2016 · 5 comments
Closed

confidence/glue support #64

kenhowardpdx opened this issue Oct 21, 2016 · 5 comments

Comments

@kenhowardpdx
Copy link
Contributor

Passing the sequelize instance in the options does not work with confidence and glue as the composer requires the manifest to be valid JSON.

@danecando
Copy link
Owner

I'm vaguely familiar with glue. It sounds like there isn't much we can do about that besides going back to having the plugin manage building up the Sequelize instance during registration again. Is this the case or are there any work arounds?

@kenhowardpdx
Copy link
Contributor Author

That's precisely the case, depending on hapi-sequelize to create the instance. What are the cons to having Sequelize be a core dependency?

@danecando
Copy link
Owner

That's how the plugin used to work before I did a complete rewrite (v3). Too tired to try and come up with a list of cons right now but my goal was to decouple Sequelize from the plugin and just make the plugin a lot simpler and more flexible overall.

I have no interest in going back to that at this moment but I will take a look at this issue later and weigh the options

@kenhowardpdx
Copy link
Contributor Author

The work around is registering an internal plugin that in-turn registers hapi-sequelize.

./server/app-start/hapi-sequelize/index.js:

import database from '../../database';

export const register: any = function register(server, options, next) {
    server.register({
        register: require('hapi-sequelize'),
        options: [
            {
                name: 'db',
                models: ['./server/models/**/*.js'],
                sequelize: database,
                sync: true
            }
        ]
    });

    next();
};

register.attributes = {
    name: 'sequelize',
    version: '1.0.0'
};

./server/database/index.js:

// libs
import * as Sequelize from 'sequelize';

export default new Sequelize(process.env.DB_DATABASE, process.env.DB_USER, process.env.DB_PASSWORD, {
    host: process.env.DB_HOST,
    port: process.env.DB_PORT,
    dialect: process.env.DB_DIALECT,
    dialectOptions: {
        encrypt: true
    }
});

./server/manifest.js:

// libs
import {Store} from 'confidence';

let store: Store,
    manifest: any;

manifest = {
    $meta: 'server setup',
    connections: [...],
    registrations: [
        // Third Party Plugins
        ...
        {
            plugin: {
                register: './app-start/hapi-sequelize'
            }
        }
        ...
    ]
};

store = new Store(manifest);

@alexdrans
Copy link
Contributor

alexdrans commented Nov 19, 2016

@kenhowardpdx

You can just do;

let manifest = require('./config/manifest');

manifest.registrations.push({
  "plugin": {
    "register": "hapi-sequelize",
    "options": {
      "name": "name",
      "models": 'models/models/*.js',
      "sequelize": new Sequelize(db_string, {
      }),
      "sync": true,
      "forceSync": false
    }
  }
})

// Load the manifest and start the server

This loads the module correctly for me. hapi-sequelize v3.0.4 and glue 4.0.0

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants