Javascript 书架JS:;这是“哈桑”;这不是一个函数

Javascript 书架JS:;这是“哈桑”;这不是一个函数,javascript,node.js,bookshelf.js,Javascript,Node.js,Bookshelf.js,尝试使用bookshelf的最简单示例,但无法在fetch语句中使用“withRelated”通过一对多关系。这是我的代码(为了隐私,删除了一些东西),表示从B到a的一对多 "use strict"; var knex = require('knex') ({ client: 'mysql', connection: { host: '127.0.0.1', user: '*******', password: '*******',

尝试使用bookshelf的最简单示例,但无法在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
Bookshelf:v0.9.4

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

速记函数表示法较短,并绑定到类的此上下文

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

非常感谢你!我也有同样的问题,使用ES5函数()修复了它。你救了我的命。。。这也是一个很好的信息,我从来都不知道
function()
()=>
之间有本质上的区别,非常酷。我不知道,谢谢。对于其他想要了解更多信息的人: