2016-07-07 51 views
0

我使用hapi-shelf工作,但是我試圖得到一個jsonapi響應,並且找不到實現bookhelf-jsonapi-parms的方法,所以我嘗試使用原來的書架包。爲什麼我的API說fetchAll不是函數?

`類型錯誤:未捕獲的錯誤: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

你不能因爲你的驅動模塊返回一個函數來訪問它。爲了訪問驅動程序對象必須調用下面的驅動程序功能的工作:

​​

我會建議你,因爲你們用什麼辦法改變,因爲下面的模型中,每個你所需要的模塊,您的時間將要初始化這個糟糕的模型。

使用以下設計最好只初始化一次。

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

感謝您的獎金提示!我注意到類似的東西,但在我看到這個答案之前,它的效率不高。雖然好信息! –

相關問題