Tag: knex.js

如何在Knexunit testing时模拟一个假数据库?

我一直使用Knex成功连接到后端数据库。 但是我想能够unit testing我的代码。 有没有办法模拟数据库连接? 我试过使用proxyquire,但我似乎无法得到它的工作。 问题似乎是Knex初始化的方式。 var knex = require('knex')({ client: 'mysql', connection: {} }); 我设置knex在我的unit testing中被嘲笑。 myService = proxyquire('../app/myService', { 'knex': knexProxy }); 我的服务包括knex。 var knex = require('knex').knex, 当我的服务运行查询时,它失败。 var sql = knex("table_name"); sql.insert(rowToInsert, "auto_increment_id"); sql.then(function (insertId) { resolve(); }, function (err) { reject(err); }); 出于某种原因,我似乎无法捕捉请求,然后再尝试连接。 我也尝试创build一个自定义的Knex客户端 ,但是这还没有奏效。

asynchronous等待或承诺不返回stream事件

我有以下函数返回一个Promise函数参数是一个asynchronous函数: createObjectFrom(record) { const self = this; return new Promise(async (resolve, reject) => { let obj = {}; for(let i = 0, l = self.opts.transformers.length; i < l; i++) { let transformer = self.opts.transformers[i]; const headerIndex = findIndex(self.headers, (header) => { return header === transformer.column; }); let csvValue = record[headerIndex]; const lookUp = transformer.options.lookUp; const […]

如何做select *从在JavaScript中使用knex?

我有这样的function: function get_projects() { var project_names=[]; knex('projects').select('name').then(function (a) { project_names.push(a); }) return project_names; } 这个函数执行return语句return project_names; 在完成project_names.push(a)语句之前,我调用这个函数后得到的是一个空数组,即使我的数据库有结果(如果我login函数a(),我可以看到这个)

Knex.js多个orderBy()列

有可能做多个orderBy()列吗? knex .select() .table('products') .orderBy('id', 'asc') orderBy()可链接只需要一个列键和一个sorting值,但是我怎样才能按多列sorting呢?

使用stream时,knex.js上的内存问题

我想用knex.js将整个sqlite3数据库表导出为CSV。 由于表可以达到300000行,我使用stream没有内存问题。 但是,如果我看我的应用程序的内存使用高达800MB或我有一个“内存不足”的错误。 我怎样才能处理sqlite3数据库上的knex.js的大型查询结果? 下面的代码示例: knex.select().from(table).stream(function (stream) { var stringifier = stringify(opts); var fileStream = fs.createWriteStream(file); var i = 0; stringifier.on('readable', function() { var row; while (row = stringifier.read()) { fileStream.write(row); console.log("row " + i++); //debug } }); fileStream.once('open', function(fd) { stream.pipe(stringifier); }); }); 编辑 似乎sqlite3数据库的knex.jsstream是“假”stream。 下面是knex中sqlite3的stream函数的源代码: Runner_SQLite3.prototype._stream = Promise.method(function(sql, stream, options) { /*jshint unused: […]

连接Postgres Heroku与Knex不工作

用Knex运行我们的查询,我们难以build立一个Heroku / Postgres数据库。 我们已经build立了我们的heroku / postgres数据库并创build了我们的表格,但是我们很难与Knex连接。 更糟糕的是,几乎没有关于将Heroku / Postgres与Knex或任何ORM连接的文档,所以试图找出这些东西是一个真正的痛苦。 这些是我试过的连接模式。 var knex = require('knex')({ client: 'pg', connection: { user: username, password: password, host: host, port: port, database: database, ssl: true } } }); 并且…请注意,ssl真正的切换和删除所有在一起无济于事。 var knex = require('knex')({ client: 'pg', connection: HEROKU_POSTGRESQL_COLOR_URL, ssl: true } }); 我们也尝试了这种模式: var pg = require('knex')({ client: 'pg', connection: HEROKU_POSTGRESQL_COLOR_URL […]

knex.js数据库调用没有完成

我正在学习node.js,遇到了knex.js和bookshelf.js,以便与不同的数据库进行交互。 我试图运行一个简单的Knex程序,但不知何故该程序不会退出。 以下是该计划: 'use strict'; console.log('Getting knex'); var knex = require('./knex')({ client: 'mysql', connection: { host: '127.0.0.1', user: 'shankhoneer', password: 'password', database: 'knex_test' } }); debugger; console.log('got knex'); knex.schema.createTable('users', function(table) { console.log('creating tables'); table.increments('id'); table.string('user_name'); }).then (function(msg){ console.log('Completed creation'); console.log(msg); return {inserted: true}; }); 我试图debugging,发现knex使用蓝鸟承诺。 我的问题是由于不完全退出承诺? 谢谢

在当前客户端上没有定义池 – knex.js + node + postgresql

我在node.js中构build一个应用程序并使用knex ORM。 我无法运行我的迁移 – 我不断收到错误: Error: There is no pool defined on the current client 这是我的连接configuration: module.exports = { knex: require('knex')({ client: 'pg', connection: { host: env.DB_HOST, user: env.DB_USER, password: env.DB_USER_PASSWORD, database: env.DB_NAME }, pool: { min: 0, max: 7 }, searchPath: env.DB_SEARCHPATH }) }; 有人可以帮忙吗? 提前致谢!

Knex.js架构:多列索引

有没有办法在Knex.js模式中指定多列索引? 或者一个人必须下降,并做一个alter table ?

使用PostgreSQL的Knexselect查询在多个并行请求上性能极度下降

简单来说 我正在开发一个游戏(梦想),我的后端堆栈是与Knex的Node.js和PostgreSQL(9.6)。 我把所有的球员数据都保存在这里,我需要经常请求。 其中一个请求需要做10个简单的select来提取数据,这就是问题的出发点:如果服务器只同时提供1个请求,这些查询是相当快的(〜1ms)。 但是,如果服务器服务器并行请求很多(100-400),查询执行时间极度降低(每个查询可能长达几秒) 细节 为了更客观,我将描述服务器的请求目标,select查询和我收到的结果。 关于系统 我在同一个conf上运行Digital Ocean 4cpu / 8gb液滴和Postgres上的节点代码(2个不同的液滴,相同的configuration) 关于请求 它需要做一些游戏操作,他为数据库中的2个玩家select数据 DDL 玩家数据由5个表格代表: CREATE TABLE public.player_profile( id integer NOT NULL DEFAULT nextval('player_profile_id_seq'::regclass), public_data integer NOT NULL, private_data integer NOT NULL, current_active_deck_num smallint NOT NULL DEFAULT '0'::smallint, created_at bigint NOT NULL DEFAULT '0'::bigint, CONSTRAINT player_profile_pkey PRIMARY KEY (id), CONSTRAINT player_profile_private_data_foreign FOREIGN KEY […]