Bookshelf js系列

时间:2016-02-16 16:19:03

标签: javascript node.js bookshelf.js knex.js

我试图使用书架集合并返回整个表格

< TypeError: Cannot read property 'apply' of undefined
<     at CollectionBase (/projects/twitter/node_modules/bookshelf/lib/base/collection.js:30:18)
<     at child [as constructor] (/projects/twitter/node_modules/bookshelf/lib/extend.js:15:14)
<     at new child (/projects/twitter/node_modules/bookshelf/lib/extend.js:15:14)
<     at Function.collection (/projects/twitter/node_modules/bookshelf/lib/bookshelf.js:110:14)
<     at all (/projects/twitter/node_modules/bookshelf/lib/model.js:703:39)
<     at fetchAll (/projects/twitter/node_modules/bookshelf/lib/model.js:768:27)

这是我的模型然后集合

var Users_Data_At_Time = bookshelf.Model.extend({
    tableName: 'Users_Data_At_Time',
    Users: function(){
        return this.belongsTo(Users);
    },
    Tweets_At_Time: function(){
        return this.hasMany(Tweets_At_Time);
    }
});

var Users_Data_At_Time_Collection = bookshelf.Collection.extend({
model: Users_Data_At_Time
});

我尝试使用.fetchAll

调用集合和模型

这是我尝试使用模型的地方

new Users_Data_At_Time().fetchAll()
.then(function (users) {
        console.log(users);
    }).catch(function (error) {
        console.log(error);
    })

我已经看过几个例子,看来这是正确的做法,但我仍然遇到了这个错误。

任何想法或想法都将是一个巨大的帮助

2 个答案:

答案 0 :(得分:0)

我想在所有书架中做到这一点,但作为解决方法我发现this overflow post使用书架中knex的原始查询来选择全部。

我不确定这是否是唯一的解决方案,如果有其他人请告诉我

答案 1 :(得分:0)

您的问题可能是文件/模型的命名。表名在您的数据库中是snake_cased,所以这显然很好。但模型名称需要是PascalCased(又名UpperCamelCase)。 INVERSE适用于您的文件,因此它应该是snake_cased。

检查这个人,特别是最后一段: https://www.npmjs.com/package/bookshelf-model