2016-07-07 52 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

感谢您的奖金提示!我注意到类似的东西,但在我看到这个答案之前,它的效率不高。虽然好信息! –

相关问题