[英]Bookshelf.knex is not a function error
將Bookshelf和Knex集成到我的堆棧中有些麻煩。 嘗試執行db read / write時,我得到一個TypeError:knex不是函數。
我的書架.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不是在Object.query(D:\\ Repositories \\ knextest \\ node_modules)的builderFn [as _builder](D:\\ Repositories \\ knextest \\ node_modules \\ bookshelf \\ lib \\ bookshelf.js:314:27)中的函數\\ bookshelf \\ lib \\ helpers.js:44:23)查詢(D:\\ Repositories \\ knextest \\ node_modules \\ bookshelf \\ lib \\ model.js:1243:30)at(D:\\ Repositories \\ knextest \\ node_modules \\ bookshelf) \\ lib \\ model.js:1278:23)在Function.Model。(匿名函數).Collection。(匿名函數)[如何](D:\\ Repositories \\ knextest \\ node_modules \\ bookshelf \\ lib \\ bookshelf.js:333 :28)在Layer.handle的validate_key_secret(D:\\ Repositories \\ knextest \\ app \\ controllers \\ gods.server.controller.js:114:3)[作為handle_request](D:\\ Repositories \\ knextest \\ node_modules \\ express \\ lib) \\ router \\ layer.js:95:5)在Route.dispatch的下一個(D:\\ Repositories \\ knextest \\ node_modules \\ express \\ lib \\ router \\ route.js:131:13)(D:\\ Repositories \\ knextest \\ node_modules) \\ express \\ lib \\ router \\ route.js:112:3)在Layer.handle [as handle_request](D:\\ Repositories \\ knextest \\ node_mod ules \\ express \\ lib \\ router \\ layer.js:95:5)在D:\\ Repositories \\ knextest \\ node_modules \\ express \\ lib \\ router \\ index.js:277:22 at Function.process_params(D:\\ Repositories \\ knextest)在SessionStrategy.strategy.pass上的\\ node_modules \\ express \\ lib \\ router \\ index.js:330:12)下一步(D:\\ Repositories \\ knextest \\ node_modules \\ express \\ lib \\ router \\ index.js:271:10) D:\\ Repositories \\ knextest \\ node_modules \\ passport \\ lib \\ middleware \\ authenticate.js:325:9)在SessionStrategy.authenticate(D:\\ Repositories \\ knextest \\ node_modules \\ passport \\ lib \\ strategies \\ 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]>'
}
};
這個很棘手。 該問題是由.debug(true)
knex調用引起的,該調用不返回knex實例。 所以將bookshelf.js
改為
'use strict'
var knex = require('knex')(require('./knexfile'));
knex.debug(true);
var bookshelf = require('bookshelf')(knex);
bookshelf.plugin('registry');
module.exports = bookshelf;
而不是以這種方式強制調試模式,也可以更好地從knex連接字符串設置它,如:
{
client: 'pg',
connection: {
host: '<my cloud host [redacted]>',
user: process.env.DBUSER,
password: process.env.DBPASSWORD,
database: '<my db name [redacted]>'
},
debug: true
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.