当我运行服务器尝试创建两个数据库(db1和db2)时,系统会重新启动此错误:
Possibly unhandled SequelizeBaseError: database "db2" does not exist
作为参考,关于此主题here存在类似的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){});
模型/ 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;
---编辑---
解决方案的作者是正确的。为了创建新数据库,必须在同步之前创建它。正如piotrbienias正确指出的那样,添加用于在初始化脚本中添加新数据库的代码将是最佳选择。 Piotrbienias解决方案是 .js 选项。对我有用的代码是 .sh 选项,如下所示:
PG_HOST=localhost
PG_PORT=5432
PG_DB=databaseName
PG_USER=ubuntu
PG_PASS='EnterPassword'
sudo -u postgres createdb -U postgres -O $PG_USER $PG_DB
答案 0 :(得分:2)
在尝试通过Sequelize访问数据库之前,您需要手动创建数据库 - 如果它不存在则不会创建数据库。在进行任何同步和连接之前,您可以在某些初始化脚本中使用pg
模块通过post创建数据库,或者只需通过postgres
CLI创建它
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.
});
});
};