使用knex和bookshelf创建数据库和模式的语法?

时间:2016-01-29 18:56:06

标签: mysql postgresql bookshelf.js knex.js

我有一些使用knex和bookshelf设置Sqlite3数据库和表的工作代码。但它看起来并不像我在Bookshelf网站上看到的那样。 This blog post似乎表明创建内容是knex的工作,但我也没有在Bookshelf网站上看到Bookshelf.conn内容。我可以使用类似这样的代码来创建Postgres数据库和表吗?

这是有效的代码(package.json有" knex":" ~0.5.7"" bookshelf":" ~0.6 .4",目前他们都在0.9):

var Bookshelf = require('bookshelf');
var path = require('path');

var db = Bookshelf.initialize({
  client: 'sqlite3',
  connection: {
    host: '127.0.0.1',
    user: 'your_database_user',
    password: 'password',
    database: 'database_name',
    charset: 'utf8',
    filename: path.join(__dirname, '../db/mydb.sqlite')
  }
});

db.knex.schema.hasTable('urls').then(function(exists) {
  if (!exists) {
    db.knex.schema.createTable('urls', function (link) {
      link.increments('id').primary();
      link.string('url', 255);
      link.string('base_url', 255);
      link.string('code', 100);
      link.string('title', 255);
      link.integer('visits');
      link.timestamps();
    }).then(function (table) {
      console.log('Created Table', table);
    });
  }

module.exports = db;

3 个答案:

答案 0 :(得分:2)

我不熟悉BookshelfKnex,但你试过这个吗?

var db = Bookshelf.initialize({
  client: 'postgresql',
  connection: {
    host     : '127.0.0.1',
    user     : 'your_database_user',
    port     : '5432',
    password : 'your_database_password',
    database : 'myapp_test',
    charset  : 'UTF8_GENERAL_CI'
  }
});

答案 1 :(得分:0)

一旦我尝试使用0.9版本的knex和bookshelf运行上面的代码,我得到了响应“Bookshelf.initialize已被弃用,直接传递knex:require('bookshelf')(knex)”。正如评论中所提到的,Bookshelf.initialize在Bookshelf内部使用了“已经配置好的Knex实例”,但显然在2014年3月之间的某个时间到现在已经被淘汰了。

答案 2 :(得分:0)

var  knex = require('knex')(
{
  client: 'postgresql',
  connection: {
    host     : '127.0.0.1',
    user     : 'your_database_user',
    port     : '5432',
    password : 'your_database_password',
    database : 'myapp_test',
    charset  : 'UTF8_GENERAL_CI'
  }
});
var bookshelf = require('bookshelf')(knex);