Node.js 书架循环依赖与ES5

Node.js 书架循环依赖与ES5,node.js,bookshelf.js,Node.js,Bookshelf.js,我有以下代码: const bookshelf = require('../config/bookshelf'); const BaseModel = require('bookshelf-modelbase')(bookshelf); const moment = require("moment"); const User = require("./User"); const Meta = require("./Meta"); const Log = require("./Log"); c

我有以下代码:

const bookshelf = require('../config/bookshelf');
const BaseModel = require('bookshelf-modelbase')(bookshelf);
const moment = require("moment");

const User = require("./User");
const Meta = require("./Meta");
const Log = require("./Log");

class Session extends BaseModel {
    get tableName() {
        return "sessions";
    }

    get hasTimestamps() {
        return false;
    }

    user() {
        return this.belongsTo(User);
    }

    meta() {
        return this.belongsTo(Meta);
    }

    logs() {
        return this.hasMany(Log);
    }
};

module.exports = Session;

belongsTo
关系正常工作,但当我尝试
hasMany
时,我得到:“未处理的拒绝错误:必须为会话hasMany relation定义有效的目标模型”错误

我看了一下,但它是使用ES5之前的语法完成的

我想我需要确保“Log”类是可用的,然后我才任命一个hasMany关系,但卡在这里

有什么想法吗

编辑:做什么

logs() {
    var log = require("./Log");
    return this.hasMany(log);
}

工作正常,但看起来很糟糕。

您可以使用书架注册表。它完全符合你的需要

您可以像这样加载Bookshelf注册表插件:

const knex = require('knex')({
    client: 'pg',
    connection: {
        host: config.db_host,
        user: config.db_user, // user name for your database
        password: config.db_password, // user password
        database: config.db_database, // database name
        charset: 'utf8',
    },
});

const bookshelf = require('bookshelf')(knex);
bookshelf.plugin('registry');

module.exports = {
    knex,
    bookshelf,
};
module.exports = {
    session: db.bookshelf.model('Session', Session),
    log: db.bookshelf.model('Log', Log),
    db,
};
然后,在module.exports中注册模型,如下所示:

const knex = require('knex')({
    client: 'pg',
    connection: {
        host: config.db_host,
        user: config.db_user, // user name for your database
        password: config.db_password, // user password
        database: config.db_database, // database name
        charset: 'utf8',
    },
});

const bookshelf = require('bookshelf')(knex);
bookshelf.plugin('registry');

module.exports = {
    knex,
    bookshelf,
};
module.exports = {
    session: db.bookshelf.model('Session', Session),
    log: db.bookshelf.model('Log', Log),
    db,
};

您可以使用书架注册表。它完全符合你的需要

您可以像这样加载Bookshelf注册表插件:

const knex = require('knex')({
    client: 'pg',
    connection: {
        host: config.db_host,
        user: config.db_user, // user name for your database
        password: config.db_password, // user password
        database: config.db_database, // database name
        charset: 'utf8',
    },
});

const bookshelf = require('bookshelf')(knex);
bookshelf.plugin('registry');

module.exports = {
    knex,
    bookshelf,
};
module.exports = {
    session: db.bookshelf.model('Session', Session),
    log: db.bookshelf.model('Log', Log),
    db,
};
然后,在module.exports中注册模型,如下所示:

const knex = require('knex')({
    client: 'pg',
    connection: {
        host: config.db_host,
        user: config.db_user, // user name for your database
        password: config.db_password, // user password
        database: config.db_database, // database name
        charset: 'utf8',
    },
});

const bookshelf = require('bookshelf')(knex);
bookshelf.plugin('registry');

module.exports = {
    knex,
    bookshelf,
};
module.exports = {
    session: db.bookshelf.model('Session', Session),
    log: db.bookshelf.model('Log', Log),
    db,
};

书架登记处正是你所需要的。为什么ES5之前的语法是个问题?你不能修改它吗?没有关于如何使用类语法的例子。另外,像“使用Bookshelf.plugin('registry')在您的Bookshelf实例上加载插件”这样的词毫无意义。我不确定应该在哪里添加代码。书架注册表正是您需要的。为什么ES5之前的语法是个问题?你不能修改它吗?没有关于如何使用类语法的例子。另外,像“使用Bookshelf.plugin('registry')在您的Bookshelf实例上加载插件”这样的词毫无意义。我不确定应该在哪里添加代码。