Bookshelf JS:“this.hasOne”不是一个函数

时间:2016-04-15 19:27:44

标签: javascript node.js bookshelf.js

尝试使用最简单的书架示例,但在fetch语句中使用“withRelated”无法超越一对多的关系。这是我的代码(隐私时删除了一些内容)代表从B到A的一对多。

"use strict";
var knex = require('knex') ({
    client: 'mysql',
    connection: {
        host: '127.0.0.1',
        user: '*******',
        password: '*******',
        database: '*******',
        charset: 'utf8'
    }
});

var bookshelf = require('bookshelf')(knex);

var A, B

A = bookshelf.Model.extend({
    tableName: 'A',
    propB: () => { 
         return this.hasOne(B, 'A_id') 
    }

B = bookshelf.Model.extend({
    tableName: 'B',
    propA: () => { return this.belongsTo(A, 'A_id') }
})

A.forge().fetch({withRelated: ['propB']}).then(function(x){console.log(x)})

然而,运行这个我得到“Unhandled rejection TypeError:this.hasOne不是函数”,引用A中的this.hasOne。如果我删除“withRelated”子句,它会按预期运行并返回正确的在数据库中输入。

为什么我收到此错误?更多信息: Nodejs:v4.4.1 书架:v0.9.4

2 个答案:

答案 0 :(得分:6)

您正在使用从其父上下文继承this的箭头函数。您需要使用function() {}语法,以便书架可以正确绑定this

答案 1 :(得分:0)

速记函数表示法较短,并且与该类的上下文绑定。

var A = bookshelf.Model.extend({
    tableName: 'A',
    propB() { 
        return this.hasOne(B, 'A_id') 
    }
})