在將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