Sequelize Create Database

前端 未结 4 1131
耶瑟儿~
耶瑟儿~ 2021-02-05 01:42

Is there a way to have sequelize create the database I\'m trying to connect to if it doesn\'t exist?

I have a raw MySQL instance and I get this error back:



        
4条回答
  •  清歌不尽
    2021-02-05 02:21

    I may have a reasonable solution. I am sure it could be written more cleanly though.

    For this example I'm using Postgres, the answer would be slightly different for MySQL. I'm heavily borrowing from this answer: node-postgres create database

    In database.js I have the following init function

    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
            });
        });
    };
    

    The init function is creating the database before sequelize is called. It first opens a connection to postgres and creates the database. If the database already exists, an error will be thrown which we are ignoring. Once it is created we initialize sequelize and send it to the callback. Importantly, if the database already exists it will not be overwritten.

    In app.js I receive the database instance and send it over to whichever module needs it, in this case it is passport.

    require('./server/config/database.js').init(function(database) {
      require('./server/config/passport.js')(passport, database);
    });
    

提交回复
热议问题