Tag: knex.js

knex.js将null转换为NaN

我有一个对象: var record = { foo: null, bar: 42 } 我想插入一个到表中: console.log(db('foos_and_bars').insert(record).toString()); // insert into "foos_and_bars" ("foo", "bar") values ('NaN', 42) 我的领域允许为空,所以我不期望knex执行这样的东西。 这可能是什么原因? 我之前多次插入null-s,并没有达到这种情况。 UPD:我已经添加了toString()来确保查询的外观。 经常运行我 – 接收错误: 错误:插入到“foos_and_bars”(“foo”,“bar”)值($ 1,$ 2) – 整数的无效input语法:“NaN”

Mysql方言不能在knex(browserified)

我最近开始在NodeJS上工作,特别是从浏览器查询并插入数据库的knex模块。 我已经在我自己的电脑上testing过我的代码了。 但是,对于浏览器,我需要使用模块browserify以正确的方式转换我的代码(到bundle.js文件中)。 但是,当我在浏览器中加载文件,它给我一个错误,说明以下内容: bundle.js:1未捕获错误:找不到模块'./dialects/mysql/index.js' 在编码中,错误在这部分之后被抛出: var Dialect; if (arguments.length === 0 || !config.client && !config.dialect) { Dialect = makeClient(Client); } else { var clientName = config.client || config.dialect; Dialect = makeClient(require("./dialects/" + (aliases[clientName] ||clientName) + "/index")); } 在此之后,错误被抛出,而文件确实存在于指定的path中。 此外,在此之前的代码行,例如: var Readable = require('./_stream_readable'); var Writable = require('./_stream_writable'); 实际上工作正常,所以我想这不可能是该function在错误的目录中search。 我正在用新的想法来解决这个问题,所以我希望有人对此有所了解。

尝试knex种子时出错:在成功迁移knex后运行:远程数据库的最新版本

试图运行knex seed:run时运行以下错误knex seed:run在我的远程postgres数据库(不是本地主机): Knex:Error Pool2 – Error: connect ECONNREFUSED 127.0.0.1:5432 。 我能够运行knex migrate:latest成功,可以看到这些表是在我的postgres服务器上创build的,但是当我尝试播种时,我得到了这个错误。 我已经运行了相同的迁移/种子文件对我的本地configuration,它已经没有问题,但是当我试图种下我的heroku postgres实例,它会引发这个错误(我没有运行我的本地PG服务,播种新的数据库,这可能是为什么它抛出一个错误)。 任何想法,为什么它试图连接到本地主机而不是指定的分贝? 我的文件样本如下: var User = require("./models/User"); var Project = require("./models/Project"); exports.seed = function(knex, Promise) { console.log(knex.client.config.connection); //This returns the correct db info. return knex('user').del() .then(function() { return knex('project').del() }).then(function() { return new User({id: 1, firstName: "James", lastName: "Lee", phone: "123-456-2000", […]

如何将字符集添加到Knex.js连接string?

我正在使用Knex.js进行数据库连接。 我想使用连接string,而不是连接对象连接到数据库,并能够指定charset 。 例: connection: 'mysql://root:secret@127.0.0.1:3306/test-db' 不 connection: { host : '127.0.0.1', user : 'root', password : 'secret', database : 'test-db', charset : 'utf8' } 我有连接string工作。 有人可以解释我将如何指定Knex.js连接string中的charset ?

使用express-sessions和knex使所有用户会话无效

我已经inheritance了需要更新的Express站点。 有一条重置密码的途径,但是当这种情况发生时,我需要使所有的用户会话失效,并允许同时在当前浏览器上自动login。 我对Express很有点新意,所以有人能指点我的方向吗? build立sessionStore: const sessionStore = knexSession(session) const store = new sessionStore({ knex: db }) app.use(session({ secret: sessionKey, resave: false, saveUninitialized: false, store, cookie: { maxAge: null, httpOnly: true, secure: app.get('env') !== 'development' || app.get('port') === 443, } })) 重置密码: let data = { password, token: null, expires: null } return models.user.update(user.id, user.id, data) […]

knexjs承诺释放池连接

我目前使用knexjs.org ,承诺而不是常规callback,并使用池连接进行SQL查询。 第一次运行顺利。 但是现在我通常面临连接池的错误。 代码是这样的 knex('user_detail') .select('id','full_name','phone','email') .where('id', id_user) .then((result) => { resolve(result); }) .catch((error) => { reject(error); }) 但是现在我通常会得到错误连接超时和错误池连接。 为什么它得到一个错误的第一件事可能是因为我没有释放连接,但我有这样的代码, knex('user_detail') .select('id','full_name','phone','email') .where('id', id_user) .then((result) => { resolve(result); }) .catch((error) => { reject(error); }) .finally(() => { knex.destroy() }) 它适用于第一次尝试,但第二次尝试失败并出现错误There is no pool defined on the current client ,有时错误The pool is probably full 有人可以向我解释发生了什么事情,我怎么解决它? […]

KnexJS原始方法在一种情况下不起作用

在一个项目上使用KnexJS,并且在整个项目中一直使用.raw()方法。 我现在有一种情况, .raw只是没有被构build到SQL中,所以syntax error at end of input错误结束时, syntax error at end of input 。 如果我转储的SQLstring,我可以看到为什么,因为它的失败 'update "mytable" set "a" = ? returning ' 我可以看到为什么它有一个问题,我遇到的问题是返回是一个Raw值,所以我只是不知道为什么它没有被编译与SQL。 knexQuery.update(data).into('mytable').returning( knexQuery.raw('mytable::json') );` 如果我使用一个string,而不是returning()方法中的rawstring,它将编译string。 如果我安慰knexQuery.raw('mytable::json')部分,它显示为一个Raw对象,具有正确的对象数据… Raw { client: Client_PG { … }, sql: 'mytable::json', bindings: undefined, _wrappedBefore: undefined, _wrappedAfter: undefined, _debug: undefined } } 我知道SQL的工作,因为我填补了缺less的部分,它的工作原理,但SQL不是问题,我只是不知道为什么raw()方法没有被编译与SQLstring。 我也有另一块代码(和INSERT之一)在我的代码中的其他地方使用相同的returning( knexQuery.raw(….) ) ,并且工作得很好。 我开始认为这是代码中的一个错误,但是花了一个小时去了KnexJS库代码之后,我看不出有什么理由不起作用。 […]

Knex:错误池2 – 错误:服务器不支持SSL连接

试图连接Postgres Node js,并遇到错误 Resource Wall is listening on port 8080 Knex:Error Pool2 – Error: The server does not support SSL connections Knex:Error Pool2 – Error: The server does not support SSL connections 如何closuresSSL连接? 这是我的环境设置 DB_HOST=localhost DB_USER=postgres DB_PASS=password DB_NAME=dbname DB_SSL=true if heroku DB_PORT=5432 和我的knexfile.js require('dotenv').config(); module.exports = { development: { client: 'postgresql', connection: { host : […]

TypeError:无法读取未定义的属性'createTableIfNotExists'

我有一个knex的问题,并迁移我的表,所以我这样做 knex migrations:make users ,然后在我定义的迁移文件中: exports.up = function(knex, Promise) { return knex.shema.createTableIfNotExists('users', (table) => { table.increment(); table.string('username').unique().notNullable; table.string('password').notNullable(); table.boolean('admin').notNullable().defaultTo(false); table.timestamp('created_at').notNullable().defaultTo(knex.raw('now()')); }) }; exports.down = function(knex, Promise) { return knex.shema.dropTableIfExists('users'); }; 然后,我运行knex migrate:latest –env development ,我有这个错误: Using environment: development Knex:warning – migrations failed with error: Cannot read property 'createTableIfNotExists' of undefined TypeError: Cannot read property 'createTableIfNotExists' […]

使用Knex使用当前时间戳更新表列

即时通讯使用Node.js和Knex为我的后端API和即时通讯尝试用当前时间戳更新表。 currentTime = new Date().toISOString(); db('_sessions') .where({ sessionkey: apiKey }) .select() .then(function(resp) { var sessionStart = new Date(resp[0].sessionstart); var sessionLast = new Date(resp[0].sessionlast); var allowableTime = resp[0].alloweddurationseconds; var currentTime = sessionLast.getTime() – sessionStart.getTime(); var minutesDifference = Math.floor(currentTime/1000); if (minutesDifference < allowableTime) { db('_sessions') .where({ sessionkey: resp[0].sessionkey }) .returning('sessionlast') .update({sessionlast: currentTime}) resolve({ securitycheck: true, userID: resp[0].userid, […]