1

私は2つのモデルを持っています:

ユーザー

'use strict';

var Mystical = require('../mystical'),
    Blog     = require('./blog'),
    Flag     = require('./user/flag');

module.exports = Mystical.db.Model.extend({
    tableName: 'user',
    defaults: {
        isAdmin: 0,
        isConfirmed: 0
    },

    blogs: function blogs() {
        return this.hasMany(Blog, 'userId');
    },

    flags: function flags() {
        return this.hasMany(Flag, 'userId');
    }

});

...そしてフラグ:

'use strict';

var Mystical = require('../../mystical'),
    User     = require('../../model/user');

module.exports = Mystical.db.Model.extend({
    tableName: 'user_flag',

    user: function user() {
        return this.belongsTo(User, 'id');
    }

});

ページでフラグを取得しようとしています:

(new Flag({ content: req.params.identifier, flag: 'register_complete' })).fetch({ withRelated: ['user'] }).then(onData).otherwise(function(error) {
    console.log(error);
});

しかし、この関数を呼び出すたびに、それ以外の場合のコールバックがトリガーされます。

TypeError: object is not a function
    at exports.Relation.RelationBase.extend.relatedInstance (/my/secret/dir/node_modules/bookshelf/dialects/sql/relation.js:217:29)
    at exports.Relation.RelationBase.extend.init (/my/secret/dir/node_modules/bookshelf/dialects/sql/relation.js:43:39)
    at exports.Model.ModelBase.extend.belongsTo (/my/secret/dir/node_modules/bookshelf/dialects/sql/model.js:37:76)
    at user (/my/secret/dir/core/model/user/flag.js:10:21)
    at EagerBase.fetch (/my/secret/dir/node_modules/bookshelf/dialects/base/eager.js:56:40)
    at /my/secret/dir/node_modules/bookshelf/dialects/sql/model.js:232:60
    at NearFulfilledProxy.when (/my/secret/dir/node_modules/bookshelf/node_modules/when/when.js:465:43)
    at Object._message (/my/secret/dir/node_modules/bookshelf/node_modules/when/when.js:389:25)
    at deliver (/my/secret/dir/node_modules/bookshelf/node_modules/when/when.js:299:7)
    at /my/secret/dir/node_modules/bookshelf/node_modules/when/when.js:296:63

今のところ、hasMany、hasOne、begsTo、begsToMany との関連付けを生成しようとしました。しかし、何も機能しません...

誰でもアイデアはありますか?

4

1 に答える 1

1

これは循環参照の問題である可能性があると感じています。

置き換えてみてください:

return this.hasMany(Flag, 'userId');

return this.hasMany(require('./user/flag'), 'userId');

return this.belongsTo(User, 'id');

return this.belongsTo(require('../../model/user'), 'id');

それでも同じ問題が発生するかどうかを確認してください。

于 2013-12-08T15:13:24.297 に答える