Tag: knex.js bookshelf.js

用于在KNEX / BookshelfJS中定义“池”的语法

首先,我对这里的所有东西都很陌生…而且对于StackOverflow来说是新的东西,所以提前做个新手道歉,我已经准备好迎接我的颠簸了… LOL。 我们使用Heroku.addon作为Postgres,并利用/引用全局环境variables来访问正确的数据库。 我们的应用程序根目录中有一个config.js文件,如下所示: db: process.env.DB_URL || { client: 'pg', connection: { database: 'db_name', user: 'user_name' } }, 在这里有人能够引导我如何将初始化“自定义池”信息的代码集成到此设置中,如[ http://knexjs.org/#Installation-pooling] [ http://knexjs.org/#Installation-pooling] /#安装-池] var knex = require('knex')({ client: 'mysql', connection: { host : '127.0.0.1', user : 'your_database_user', password : 'your_database_password', database : 'myapp_test' }, pool: { min: 0, max: 7 } }); 在Heroku上,process.env.DB_URL是一个复杂的URL,类似于: postgres://(redacted)@ec5-87-1-47-54.compute-1.amazonaws.com:5432/d8n2e9ebd0q9it 所以,我希望有一个干净的方式来传递'自定义池'的信息,以及在这里或另一个文件/位置。 […]

用SQLite3进行unit testing

我正在编写unit testing,并用他的inmemory模式使用SQLite3。 我这样做,因为我需要是每个testing新的数据库,所以我可以并行运行testing,而不会相互影响。 但是,这越来越慢,更多的testing,我有。 是否有任何优化,我可以用sqlite3,另一个更好的工作stream程(如一个好的嘲笑库)或另一个解决scheme做这个问题? 我需要运行原始查询。 目前我使用knexjs,但是这与所有的数据访问库有关。

如何在迁移文件中logging函数(knex.js)

我一直在想如何在迁移文件中写下函数。 理想情况下,它应该与我们正在做的方法完全相反。 现在假设我写up函数来删除列上的unique约束,向表中添加了一些新的行(具有重复的数据),现在我想回滚迁移。 理想情况下,我会写下方法来在列上再次添加唯一约束,但是迁移不会因为表包含重复数据而回滚。 所以我的问题是 – 在这种情况下该怎么办? 如何在迁移中写下函数? 在这种情况下,我可以保持downfunction吗? 谢谢。

testing和使用书架/ Knex时“没有这样的表格:用户”

我试图运行一个简单的testing使用摩卡和我的Bookshelf / Knex模型,但是我得到错误“未处理的拒绝错误:SQLITE_ERROR:没有这样的表:用户”。 请注意,我试图在内存中使用SQLite。 这是我的Knexfile: module.exports = { development: { client: 'sqlite3', connection: { filename: ':memory:' } }, test: { client: 'mysql', connection: { host: '172.18.0.2', user: 'root', password: '', database: 'staging_db', charset : 'utf8' }, pool: { min: 2, max: 10 }, migrations: { tableName: 'knex_migrations' } }, production: { client: 'mysql', connection: { […]

如何获得使用书架的行数?

我怎样才能得到行数(没有任何filter)? 我试过这个User.fetch().count()和User.count() ,但我分别得到这些错误: TypeError: User.fetch is not a function AssertionError: expected { Object (_bitField, _fulfillmentHandler0, …) } to equal 0 这是我的模型: let bookshelf = require('../config/database'); require('./role'); var User = bookshelf.Model.extend({ tableName: 'users', role: function() { return this.hasOne(Role); } }); module.exports = bookshelf.model('User', User);

如何使用Bookshelf / Knex在Postgres中插入/更新`ARRAY`列

我在我的Postgres数据库中有一个表,其中包含一个数据types为ARRAY的列。 我正在使用Bookshelf在数据库上执行操作。 现在,我想插入/更新(追加新的数据到数组中的以前的数据)数据在这个列中,我无法find一个方法来做到这一点。 任何人都可以指导我怎样才能做到这一点? 我认为,这样做的一种方法可能是使用Knex的raw()函数,但我不确定如何使用raw()函数,所以请引导我。 谢谢。

Knex从多个表中select

我想用knex运行下面的SQL: select * from ( (select * from foo) union all (select * from bar)) as biz limit 10 offset 20; 有没有办法做到这一点没有knex.raw ?

如何在书架上批量“插入”?

我需要从一个CSV文件(大约20K行)将数据导入到我的数据库。 有些行可能已经存在于数据库中,因此只需要更新它们,但是必须插入新的行。 如果任何操作失败,交易必须取消。 我怎样才能做到这一点? 这是我正在使用的代码: var vehicle = { id: row.id, lastUpdate: moment(row.lastUpdate, 'DD/MM/YYYY – HH:mm').toDate(), version: row.version, color: row.color, location: row.location, status: row.status }; Vehicle.forge({ id: row.id }) .save(vehicle, { transacting: t, patch: true }) .then(model => { console.log('*************' + vehicle.id); }) .catch(Vehicle.NoRowsUpdatedError, err => { // There are no rows for this chassis, […]

Bookshelf.knex不是一个函数错误

将Bookshelf和Knex集成到我的堆栈有一些麻烦。 当试图执行数据库读/写,我得到一个TypeError:knex不是一个函数。 我的bookshelf.js: 'use strict' var knex = require('knex')(require('./knexfile')).debug(true); var bookshelf = require('bookshelf')(knex); bookshelf.plugin('registry'); module.exports = bookshelf; 我的god.model.js: var bookshelf = require('./bookshelf'); var God = bookshelf.Model.extend({ tableName: 'gods' }); module.exports = bookshelf.model('God', God); 最后,获取数据的函数: var validate_key_secret = function(key, secret, callback) { God.where({apikey: key}).fetch().then(function(result) { if(result.attributes.apisecret === secret) { callback(results); } else { callback(false); } }); […]

Bookshelf.js – 如何获得一个查询“隐藏”字段?

我有以下书架模型: Bookshelf.model.extend({ tableName: 'users', hidden: ['password'] }, { async getBy(filter) { return await this.query({where: filter}).fetch(); } }) 正如你所看到的,现场password是隐藏的(因为我通常不希望它被显示)。 但是,我需要它来连接我的用户(当进行哈希比较): const user = await userModel.getBy({email: req.body.email}); if (await bcrypt.compare(req.body.password, user.password)) { // here user.password is undefined because it is hidden } 有没有办法使捷径插件和获取密码,而不必直接使用knex ( Bookshelf.knex.raw() )做的事情? 最好的祝福,