Bookshelf JS:"this.hasOne" 不是函数

Bookshelf JS: "this.hasOne" is not a function

尝试完成最简单的书架示例,但无法通过在获取语句中使用 "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 is not a function",指的是 A 中的 this.hasOne。如果我删除 "withRelated" 子句,它会按预期运行并且 returns 数据库中的正确条目。

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

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

Shorthand 函数符号更短并且绑定到 class.

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