Bookhelf와 Knex를 스택에 통합하는 데 약간의 문제가 있습니다. db 읽기/쓰기를 시도 할 때 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가 Object.query (D : \ Repositories \ lib 디렉토리)에 의 builderFn에있는 D : \ Repositories \ Knextest \ node_modules \ bookshelf \ lib \ bookshelf.js : 314 : 27의 입니다. (D : \ Repositories \ knestest \ node_modules \ bookshelf \ lib \ model.js : 1243 : 30) 위치 : (익명 함수) .Collection. (익명 함수) [where where] (D : \ Repositories \ knextest \ node_modules \ bookshelf \ lib) (D : \ Repositories \ knextest \ app \ controllers \ gods.server.controller.js : 114 : 3) at Layer.handle [handle_request] (D : \ Repositories (\ bookshelf.js : 333 : 28) ) \ knextest \ node_modules \ express \ lib \ router \ layer Route.dispatch (D : \ Repositories \ knextest \ node_modules \ express)에서 다음 (D : \ Repositories \ knextest \ node_modules \ express \ lib \ router \ route.js : 131 : 13) D : \ Repositories \ Knextest \ node_modules \ express \ lib \ router \ layer.js : 95 : 5)에서 의 D : \ lib \ router \ route.js : Function.process_params (D : \ Repositories \ knextest \ node_modules \ express \ lib \ router \ index.js : 330 : 12)에서 \ Repositories \ knextest \ node_modules \ express \ lib \ router \ index.js : 277 : 22 SessionStrategy.strategy.pass (D : \ Repositories \ knextest \ node_modules \ passport \ lib \ middleware \ authenticate)의 다음 (D : \ Repositories \ knextest \ node_modules \ express \ lib \ router \ index.js : 271 : 10) .js : 325 : 9) at SessionStrategy.authenticate (D : \ Repositories \ knextest \ node _modules \ 여권 \ lib 디렉토리의 \ 전략 \ session.js : 10) 내가 지금까지 시도했습니다 무엇
: 71 bookshelf.js 노드 모듈을 조사
1).
내가 간단한 SQL을 수행 할 수 있어요builder = bookshelf.knex.select().from(tableNameOrBuilder);
읽기 및 쓰기
builder = bookshelf.knex(tableNameOrBuilder);
나는 라인을 변경
: 오류 314 ./node_modules/bookshelf/lib/bookshelf.js 라인에서 발생 . 그러나 이것은보다 복잡한 질의에 문제를 야기하기 시작하고 노드 모듈을 편집하는 것이 일반적으로 좋지 않은 방법이라고 생각합니다. 그러나이 작업을 수행하면 knexfile/db 구성에서 발생할 수있는 문제를 배제 할 수 있습니다.2) 순환 종속성 오류의 경우 bookshelf.plug('registry')
을 통합합니다.
3) knex 문서 확인. Knex (tablename)는 쿼리 작성기의 일부이므로 작동해야합니다.그래서 난 내 bookshelf.js 파일의 끝에,
knex('gods');
을 추가하며 유사한 오류 [knex는 함수가 아닙니다] 던졌다.
나는 knex 모듈이 부적절하게로드되고있는 것이 문제라고 생각했지만, 그런 경우인지 확인하는 방법을 모르겠습니다. 잠시 동안, 나는 다소 혼란 스럽다.
위의 내용이 불분명 한 경우 죄송합니다. 저는 여전히 노드 및 자바 스크립트 개발에 익숙하지 않으며이 문제를 해결하는 데 도움이되는 기타 정보를 제공해 드리고자합니다.
감사합니다!
편집 :
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]>'
}
};
당신이 pls는 knexfile 추가 할 수 있습니다 : 그래서 그것은 또한 더 나은 knex에서 그것을 설정 될 수있다이 방법은 같은 문자열을 연결하는 대신 디버그 모드를 강제
에
bookshelf.js
을 변경? – paqash예! 원래 게시물에 추가됨 – abhuptani