为什么我的 API 说 fetchAll 不是函数?
Why is my API saying fetchAll is not a function?
我让它与 hapi-shelf 一起工作,但我试图获得 jsonapi 响应,但找不到用它实现 bookshelf-jsonapi-parms 的方法,所以我正在尝试 bookshelf 的原始包.
`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' );
models/driver.js
var bookshelf = require('../server').bookshelf;
module.exports = function (bookshelf) {
var Driver = bookshelf.Model.extend({
tableName: 'drivers'
});
return bookshelf.model('Driver', Driver);
};
controllers/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 );
} )
}
}
}
);
您无法访问它,因为您的驱动程序模块正在返回一个函数。为了访问 Driver 对象,您必须调用 Driver 函数,如下所示:
var Driver = require('../models/driver')(bookshelf)
我建议您按以下方式更改模型,因为使用您使用的方法,每次您需要模块时都会初始化模型,这是错误的。
下面的设计最好只初始化一次。
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 );
})
我让它与 hapi-shelf 一起工作,但我试图获得 jsonapi 响应,但找不到用它实现 bookshelf-jsonapi-parms 的方法,所以我正在尝试 bookshelf 的原始包.
`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' );
models/driver.js
var bookshelf = require('../server').bookshelf;
module.exports = function (bookshelf) {
var Driver = bookshelf.Model.extend({
tableName: 'drivers'
});
return bookshelf.model('Driver', Driver);
};
controllers/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 );
} )
}
}
}
);
您无法访问它,因为您的驱动程序模块正在返回一个函数。为了访问 Driver 对象,您必须调用 Driver 函数,如下所示:
var Driver = require('../models/driver')(bookshelf)
我建议您按以下方式更改模型,因为使用您使用的方法,每次您需要模块时都会初始化模型,这是错误的。
下面的设计最好只初始化一次。
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 );
})