2015-07-08 27 views
12

Varsa, bağlanmaya çalıştığım veritabanını sıralı hale getirmenin bir yolu var mı?Sequelize Veri Tabanı Oluştur

Ben çiğ MySQL örneği var ve geri bu hatayı alıyorum:

ER_BAD_DB_ERROR: Unknown database 'mytest' 

Ben o hatayı işlemek verdiğim creds kullanmak istiyorum (veya farklı bir dizi oluşturmak izinlerle oluşturur), ve CREATE DATABASE mytest'i çalıştırın.

+5

Bu özelliğin devam etmekte olduğunu sanmıyorum, ancak ben de böyle bir özellik istiyorum. Hiçbir şey, mevcut bir projeye başlamaktan ve uygulamayı çalıştırabilmeniz için önce bir veritabanı kurmaya gerek duymaktan daha rahatsız edici değildir. İş arkadaşlarımı herhangi bir kuruluma koymak istemiyorum. İndir ve git git yoludur. – Spencer

cevap

17

Makul bir çözüm bulabilirim. Yine de daha temiz bir şekilde yazılabileceğine eminim.

Bu örnekte Postgres kullanıyorum, cevap MySQL için biraz farklı olabilir. Zar zor bu cevap ödünç: Ben init fonksiyonu

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

sequelize çağrılmadan önce init fonksiyonu veritabanını yaratıyor database.js ise node-postgres create database

aşağıdakilere sahip. İlk önce postacılara bir bağlantı açar ve veritabanını oluşturur. Veritabanı zaten mevcutsa, görmezden geldiğimiz bir hata atılır. Oluşturulduktan sonra, sıralı hale getirmeye başlıyoruz ve geri aramaya gönderiyoruz. Önemli olarak, eğer veritabanı zaten mevcutsa, üzerine yazılmayacaktır.

Uygulama.js'de veritabanı örneğini alıp hangi modülün ona ihtiyacı olduğunu göndermek için bu durumda pasaport olurum. Benim durumumda

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

Düğüm-pg'ye bakmak için iyi düşünün. Node-mysql'i kontrol edip benzer bir şey olup olmadığını kontrol edeceğim. Çalışırsa geri dönüp cevaplanır. –

+0

"Veritabanı zaten mevcutsa, göz ardı ettiğimiz bir hata atılacak" diyorsunuz. Bu, veritabanının üzerine yazılacaksa zaten var olduğu anlamına mı geliyor? Ya da yeni bulup kullanacak mı? –

+0

@steven_noble Hayır, DB zaten varsa, CREATE DATABASE bunu bildiren bir hata gönderir. Mevcut bir veritabanının üzerine yazmaz. Bunu kukla bir DB adıyla test edebilir ve ne yazdığını ve ne yaptığını görmek için hatayı çıkartabilirsiniz. – Spencer

1

ben sqlite kullanıyordum, ama fikir aynıydı. Veritabanını ilk olarak sqlite3 ile oluşturmam gerekiyordu.

const sqlite = require('sqlite3'); 
const db = new sqlite.Database('/path/to/database.sqlite'); 
const sequelize = new Sequelize('database', '', '', { 
    dialect: 'sqlite', 
    storage: '/path/to/database.sqlite', 
    ... 
});