2014-06-10 6 views

Répondre

8

Sous le capot, bookshelf utilise knex (qui, dans la version actuelle, vous devez utiliser explicitement instancier).

Si vous définissez le client d'être sqlite3 dans les options, et que vous spécifiez un chemin valide dans l'objet connection (propriété filename), il se connecte ou créer au besoin (mise en garde: en supposant que vous avez lecture/écriture au fichier destination). La raison pour laquelle un fichier de base de données n'est pas simplement créé est que vous devez d'abord écrire - alors essayez de créer un schéma (knex schema builder). Ensuite, vous devriez voir le fichier est créé.

Pour être un peu plus explicite - voici le genre de ce que vous recherchez:

var path = require('path') 
    , fs = require('fs') 
    , knex = require('knex') 
    , bookshelf = require('bookshelf') 
    , dbFile = path.join(__dirname, 'app.db') 
    , db = null // bookshelf db instance 

// init db 
db = bookshelf(knex({ 
    client: 'sqlite3' 
    , connection: { filename: dbFile } 
})) 

// create a schema if no db found 
fs.exists(dbFile, function(exists) { 
    if (!exists) { 
     db.knex.schema.createTable('test_table', function(table) { 
      table.increments() 
      table.string('some_col') 
     }) 
    } 
}) 

// ... do other stuff here ... 
+0

Je pense que knex crée le fichier lors de la création de la connexion, de sorte que vous êtes probablement mieux utiliser 'createTableIfNotExists' – Mr5o1