2017-05-17 12 views
0

은 내가 Node.js를하고 ORM의 새로운 해요, 그리고 난 DB를 querys에 대한 책장을 사용하고 있습니다. 그래서, 나는 책장의 문서를 확인하고 내가 MySQL의에서 기존 스키마에 쿼리를 작성려고 할 때 다음과 같은 오류가 발생합니다 :빌더 = bookshelf.knex (tableNameOrBuilder);

user 
     .query('where', 'usuario', '=', 'admin') 
     .fetch() 
     .then(function(user) { 
     console.log(user) 
    }); 

: 여기

TypeError: bookshelf.knex is not a function 
     at Child.builderFn [as _builder] (/home/mauricio/techday/techday-   node/node_modules/bookshelf/lib/bookshelf.js:314:27) 
at Object.query (/home/mauricio/techday/techday-node/node_modules/bookshelf/lib/helpers.js:44:23) 
at Child.query (/home/mauricio/techday/techday-node/node_modules/bookshelf/lib/model.js:1243:30) 
at Function.Model.(anonymous function).Collection.(anonymous function) [as query] (/home/mauricio/techday/techday-node/node_modules/bookshelf/lib/bookshelf.js:333:28) 
at Object.<anonymous> (/home/mauricio/techday/techday-node/app.js:20:2) 
at Module._compile (module.js:571:32) 
at Object.Module._extensions..js (module.js:580:10) 
at Module.load (module.js:488:32) 
at tryModuleLoad (module.js:447:12) 
at Function.Module._load (module.js:439:3) 
at Module.runMain (module.js:605:10) 
at run (bootstrap_node.js:427:7) 
at startup (bootstrap_node.js:151:9) 
at bootstrap_node.js:542:3 

내 쿼리입니다 여기 내 db.js입니다 : 지금

'use strict' 
     var db = require('bookshelf')(knex); 
     var securePassword = require ('bookshelf-secure-password'); 
     db.plugin(securePassword); 
     db.plugin('registry'); 


     var knex = require('knex')({ 
     client: 'mysql', 
     connection: { 
     host: 'localhost', 
     user: 'root', 
     password: 'password', 
     database: 'test', 
     charset: 'utf8' 
     } 
    }); 




     module.exports = db; 

그리고 내의 user.js

var db = require('../Commons/db.js'); 
var bcrypt = require('bcrypt-nodejs'); 

var user = db.Model.extend({ 
    tableName: 'usuario', 
    hasSecurePassword: 'contraseña' 
}); 



module.exports = db.model('user',user); 
+0

어떻게'db'와'user' 정의? 두 가지를 모두 정의하는 코드를 추가하십시오. – flaviodesousa

+0

나는 이미 user와 db 모두를 추가했다. –

답변

0

연결의 정의는 책장 인스턴스를 작성하기 전에 와서, 그래서 당신의 db.js을 변경해야합니다

'use strict'; 
var knex = require('knex')({ 
    client: 'mysql', 
    connection: { 
    host: 'localhost', 
    user: 'root', 
    password: 'password', 
    database: 'test', 
    charset: 'utf8' 
    } 
}); 
var db = require('bookshelf')(knex); // now bookshelf knows how to connect 
var securePassword = require('bookshelf-secure-password'); 
db.plugin(securePassword); 
db.plugin('registry'); 

module.exports = db; 

어쨌든 명시 적으로 코드에 배치 된 데이터베이스 연결을 갖는하지 않는 것이 좋습니다. (책장 등) Knex 기반 데이터베이스의 더 나은 방법이 너무 knex CLI (마이그레이션, 씨앗)를 사용하기 쉽게 제작하는 knexfile을 사용할 수 있어야합니다. 코드의 모습이 경우

:

'use strict'; 
var knex = require('knex')(
    require('./knexfile')[process.env.NODE_ENV||'development']); 
var db = require('bookshelf')(knex); 
var securePassword = require('bookshelf-secure-password'); 
db.plugin(securePassword); 
db.plugin('registry'); 

module.exports = db; 
0

나는 책장에 대해 잘 모르겠지만, 당신의 db.js 코드와 적어도 하나의 문제는 당신이 undefined knex과 책장을 초기화하는 것입니다. 자바 스크립트 var 변수가 초기화되지 않은 경우에도 함수의 시작부터 항상 존재 게양하고 있기 때문에

var db = require('bookshelf')(knex); 
// knex is still undefined and will be initialized later on 
// when you do var knex = require('knex')({...}) 

오류는,이 발생하지 않습니다. 당신이 책장을 초기화 할 때

당신은 변수를 선언 let를 사용하는 경우

는, 노드는 알 수없는 변수 오류가 발생합니다.