Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Sequelize和Node.js:以编程方式在一台服务器上初始化多个数据库_Javascript_Node.js_Database_Postgresql_Sequelize.js - Fatal编程技术网

Javascript Sequelize和Node.js:以编程方式在一台服务器上初始化多个数据库

Javascript Sequelize和Node.js:以编程方式在一台服务器上初始化多个数据库,javascript,node.js,database,postgresql,sequelize.js,Javascript,Node.js,Database,Postgresql,Sequelize.js,当我运行试图创建两个数据库(db1和db2)的服务器时,系统会返回以下错误: Possibly unhandled SequelizeBaseError: database "db2" does not exist 作为参考,在这个主题上有类似的stackoverflow问题,但是,解决方案的作者没有介绍如何设置server.js文件的解决方案。您会注意到我的index.js文件的结构与他们的答案类似 我的models/index.js文件和服务器正常运行并执行脚本,但第二个数据库根本无法工作

当我运行试图创建两个数据库(db1和db2)的服务器时,系统会返回以下错误:

Possibly unhandled SequelizeBaseError: database "db2" does not exist
作为参考,在这个主题上有类似的stackoverflow问题,但是,解决方案的作者没有介绍如何设置server.js文件的解决方案。您会注意到我的index.js文件的结构与他们的答案类似

我的models/index.js文件和服务器正常运行并执行脚本,但第二个数据库根本无法工作,甚至无法初始化

有人能为server.js文件提供一个解决方案,以便在这台服务器上准确初始化两个数据库吗?

下面是models/index.js和server.js文件中的部分代码。在server.js文件中,我使用.sync初始化数据库

server.js

    [...] 
    //sync's sequelize DB and tables                                                                                                                                                                     
    db['db1'].sequelize.sync(function(err){});
    db['db2'].sequelize.sync(function(err){});
models/index.js

    var databasesArray = ['db1', 'db2']
    var databasesObj = {
        database: {
            db1: {
                DBName: 'db1',
                User: user,
                Password: password,
                Config: config,
            },
            db2: {
                DBName: 'db2',
                User: user,
                Password: password,
                Config: config,
            }
        }
    } // EOF databaseObj                                                                                                                                                                     

    for(var i = 0; i < databasesArray.length; ++i) {
        var databasePointerToOBJ = databasesArray[i];
        var database = databasesObj.database[databasePointerToOBJ]
        if(database.DBName == 'db1'){
            var sq = new Sequelize(database.DBName, user, password, config)
            db['db1'] = {
                Sequelize: Sequelize,
                sequelize: sq,
                Table1: sq.import(__dirname + '/...')
            }
        }else if(database.DBName == 'db2'){
            var sq = new Sequelize(database.DBName, user, password, config)
            db['db2'] = {
                Sequelize: Sequelize,
                sequelize: sq,
                Table1: sq.import(__dirname + '/...')
            }
        }
    }
module.exports = db;

在尝试通过Sequelize访问数据库之前,需要手动创建数据库-如果数据库不存在,则不会创建数据库。在进行任何同步和连接之前,您可以在一些初始化脚本中使用
pg
模块通过创建DB,或者只需通过
postgres
CLI创建DB即可

const pg = require('pg');

module.exports = function(next){

    var connectionData = {
        user: 'postgres',
        password: 'password',
        host: 'localhost'
    };

    var databaseName = 'db2';
    var connectionUri = `postgres://${user}:${password}@${host}/postgres`;

    pg.connect(connectionUri, function(err, client, done) {
        client.query(`CREATE DATABASE ${databaseName}`, function(error){
            // here you can perform some sequelize operations after creating the database
            client.end(); // disconnect client
            next(); // you can call it with some parameter like Sequelize instance etc.
        });
    });

};

在尝试通过Sequelize访问数据库之前,需要手动创建数据库-如果数据库不存在,则不会创建数据库。在进行任何同步和连接之前,您可以在一些初始化脚本中使用
pg
模块通过创建DB,或者只需通过
postgres
CLI创建DB即可

const pg = require('pg');

module.exports = function(next){

    var connectionData = {
        user: 'postgres',
        password: 'password',
        host: 'localhost'
    };

    var databaseName = 'db2';
    var connectionUri = `postgres://${user}:${password}@${host}/postgres`;

    pg.connect(connectionUri, function(err, client, done) {
        client.query(`CREATE DATABASE ${databaseName}`, function(error){
            // here you can perform some sequelize operations after creating the database
            client.end(); // disconnect client
            next(); // you can call it with some parameter like Sequelize instance etc.
        });
    });

};

谢谢你的回复。我用适合我具体情况的答案修改了我的问题。您的回答是正确的,我更喜欢使用.sh脚本,然后根据您的指导修改我的初始化脚本。感谢您的回复。我用适合我具体情况的答案修改了我的问题。您的回答是正确的,我更喜欢使用.sh脚本,然后根据您的指导修改初始化脚本。