有没有办法如果不存在,可以使用连续创建数据库进行后续创建?
ER_BAD_DB_ERROR: Unknown database 'mytest'
我想处理这个错误,使用我提供的证书(或创建权限的另一组创建),然后运行CREATE DATABASE mytest.
解决方法
我可能有一个合理的解决方案.我相信它可以写得更干净.
对于这个例子,我使用的是Postgres,MysqL的答案会有所不同.我从这个答案中大量借用:node-postgres create database
在database.js中,我有以下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 }); }); };
init函数在调用Sequelize之前创建数据库.它首先打开与postgres的连接并创建数据库.如果数据库已经存在,将抛出一个我们忽略的错误.一旦创建,我们初始化后续,并将其发送回回调.重要的是,如果数据库已经存在,则不会被覆盖.
在app.js中,我收到数据库实例并将其发送到需要的模块,在这种情况下它是护照.
require('./server/config/database.js').init(function(database) { require('./server/config/passport.js')(passport,database); });