2016-07-07 10 views
0

hapi-shelfで作業していましたが、jsonapiの応答を得ようとしていて、bookshelf-jsonapi-parmsを実装する方法が見つからないので、本棚用のオリジナルパッケージを試しています。私のAPIはfetchAllが関数ではないと言っているのはなぜですか?

`TypeError例外:不明なエラー:Driver.fetchAllでない関数

server.js

'use strict'; 

const Hapi = require('hapi'); 
const bodyParser = require('body-parser'); 


const port = 9200; 
const dbConfig = require('./config/config'); 
const server = new Hapi.Server(); 

server.connection({ 
    port: port, 
    routes: { 
     cors: true 
    } 
}); 

var knex = require('knex')({ 
client: 'mysql', 
connection: { 
    "host": "127.0.0.1", 
    "user": "user", 
    "password": "pass", 
    "database": "db" 
} 

})。

server.bookshelf = require('bookshelf')(knex); 

server.start((err) =>{ 

    if(err){ 
     throw err; 
    } 
    console.log('Server running on port ', port); 
}); 

module.exports = server; 

require('./routes'); 

モデル/ driver.js

var bookshelf = require('../server').bookshelf; 

module.exports = function (bookshelf) { 

    var Driver = bookshelf.Model.extend({ 
     tableName: 'drivers' 
    }); 

    return bookshelf.model('Driver', Driver); 
}; 

コントローラ/ drivers.js

'use strict'; 
var server = require('../server'); 
var bookshelf = server.bookshelf; 
var Driver = require('../models/driver'); 

exports.index = server.route(
    { 
     method: 'GET', 
     path: '/drivers', 
     config: { 
      handler: function(request, reply){ 
       Driver.fetchAll().then(function(drivers){ 
         reply(drivers); 
        }) 
      } 
     } 
    } 
); 

答えて

4

お使いのドライバモジュールは、関数を返すので、あなたはそれにアクセスすることはできません。あなたは以下のようにドライバ機能を呼び出す必要がありますドライバのオブジェクトにアクセスするために動作するように:

は、私はあなたにお勧めし ​​

があるため、使用するアプローチで以下のようにモデルを変更するために、あなたはモジュールあなたを必要とするたびに悪いモデルを初期化しようとしています。

以下のデザインを使用して1回だけ初期化する方が良いです。

var Bookshelf = require('../server').bookshelf; 

var Driver = Bookshelf.Model.extend({ 
    tableName: 'drivers' 
}); 

module.exports = Bookshelf.model('Driver', Driver); 

コントローラでは、次のように指定するだけです。

var Driver = require('../models/driver') 
Driver.fetchAll().then(function(drivers){ 
    reply(drivers); 
}) 
+0

ボーナスチップありがとう!私はこのようなことに気付きましたが、この回答を見る前にそれをあまり効率的に固定しませんでした。良い情報だけど! –

関連する問題