在将Bookshelf和Knex集成到我的堆栈时遇到了一些麻烦。当试图执行数据库读/写,我得到一个TypeError:knex不是一个函数。Bookshelf.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);
}
});
}
调用函数引发以下错误:
TypeError:bookshelf.knex不是函数 at builderFn [as _builder](D:\ Repositories \ knextest \ node_modules \ bookshelf \ lib \ bookshelf.js:314:27) at Object.query(D:\ Repositories \ (D:\ Repositories \ knextest \ node_modules \ bookshelf \ lib \ model.js:1243:30) at where(D:\ Repositories \ (匿名函数).Collection(匿名函数)[as where](D:\ Repositories \ knextest \ node_modules \ bookshelf \ lib) \ bookshelf.js:333:28) at validate_key_secret(D:\ Repositories \ knextest \ app \ controllers \ gods.server.controller.js:114:3) at Layer.handle [as handle_request](D:\ Repositories \ knextest \ node_modules \表现\ LIB \路由器\层(D:\ Repositories \ knextest \ node_modules \ express \ lib \ router \ route.js:131:13) at Route.dispatch(D:\ Repositories \ knextest \ node_modules \ express).js:95:5) (D:\ Repositories \ knextest \ node_modules \ express \ lib \ router \ layer.js:95:5) at D:\ lib \ router \ route.js:112:3) at Layer.handle [as handle_request] \ Repositories \ knextest \ node_modules \ express \ lib \ router \ index.js:277:22 at Function.process_params(D:\ Repositories \ knextest \ node_modules \ express \ lib \ router \ index.js:330:12) (D:\ Repositories \ knextest \ node_modules \ express \ lib \ router \ index.js:271:10) at SessionStrategy.strategy.pass(D:\ Repositories \ knextest \ node_modules \ passport \ lib \ middleware \ authenticate .js:325:9) at SessionStrategy.authenticate(D:\ Repositories \ knextest \ node _modules \护照\ LIB \策略\ session.js:71:10)
我试过到目前为止:
1)调查的bookshelf.js节点模块。该错误是在./node_modules/bookshelf/lib/bookshelf.js线发生314:
builder = bookshelf.knex(tableNameOrBuilder);
当我改变线路,
builder = bookshelf.knex.select().from(tableNameOrBuilder);
我能执行简单的SQL读取和写入。但是,这开始导致更复杂的查询问题,并且我认为编辑节点模块通常不是好习惯。但是,这样做可以排除我的knexfile/db配置可能出现的任何问题。
2)在循环依赖性错误的情况下集成bookshelf.plug('registry')
。
3)检查knex文档。 Knex(tablename)是查询生成器的一部分,应该工作。所以我添加,
knex('gods');
要我bookshelf.js文件的末尾,它扔了一个类似的,[knex不是函数]错误。
我认为这个问题可能是knex模块加载不正确,但我不知道如何检查是否是这种情况。目前,我很难过。
如果以上任何事情都不清楚,我还是很抱歉,我还是比较新的节点和JavaScript开发,并且很乐意提供任何其他信息,以帮助解决这个问题。
谢谢!
编辑:
Knexfile.js:
module.exports = {
client: 'pg',
connection: {
host: '<my cloud host [redacted]>',
user: process.env.DBUSER,
password: process.env.DBPASSWORD,
database: '<my db name [redacted]>'
}
};
可以添加你knexfile请? – paqash
当然!添加到原始文章 – abhuptani