Posso avere una soluzione ragionevole. Sono sicuro che potrebbe essere scritto in modo più pulito però.
Per questo esempio sto utilizzando Postgres, la risposta sarebbe leggermente diversa per MySQL. Sto pesantemente prestito da questa risposta: node-postgres create database
In database.js ho la funzione init
var Sequelize = require('sequelize'),
pg = require('pg');
module.exports.init = function(callback) {
var dbName = 'db_name',
username = 'postgres',
password = 'password',
host = 'localhost'
var conStringPri = 'postgres://' + username + ':' + password + '@' + host + '/postgres';
var conStringPost = 'postgres://' + username + ':' + password + '@' + host + '/' + dbName;
// connect to postgres db
pg.connect(conStringPri, function(err, client, done) {
// create the db and ignore any errors, for example if it already exists.
client.query('CREATE DATABASE ' + dbName, function(err) {
//db should exist now, initialize Sequelize
var sequelize = new Sequelize(conStringPost);
callback(sequelize);
client.end(); // close the connection
});
});
};
La funzione init sta creando il database prima sequelize si chiama seguente. Prima apre una connessione a postgres e crea il database. Se il database esiste già, verrà generato un errore che stiamo ignorando. Una volta creato, inizializziamo sequelize e lo inviamo al callback. È importante sottolineare che, se il database esiste già, non verrà sovrascritto.
In app.js Ricevo l'istanza del database e la invio a qualsiasi modulo ne abbia bisogno, in questo caso è passaporto.
require('./server/config/database.js').init(function(database) {
require('./server/config/passport.js')(passport, database);
});
Non credo che questa funzione esista in sequelize, ma anch'io vorrei una funzionalità come questa. Niente è più fastidioso che iniziare su un progetto esistente e aver bisogno di configurare un database prima ancora di poter eseguire l'app. Non voglio mettere i miei colleghi in nessuna configurazione. Scarica e vai è la strada da percorrere. – Spencer