2017-01-24 2 views
0

У меня есть следующий код:Bookshelf циклическая зависимость с ES5

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; 

и

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

class Log extends BaseModel { 
    get tableName() { 
     return "logs"; 
    } 

    get hasTimestamps() { 
     return false; 
    } 

    session() { 
     return this.belongsTo(Session); 
    } 

    getDate() { 
     return moment(this.get("date")).format("MMM DD, YYYY - HH:mm:ss") 
    } 
}; 

module.exports = Log; 

belongsTo отношение работает правильно, но когда я пытаюсь hasMany, я получаю: «Необработанное отказ Ошибка: Действительный целевая модель должна быть определена для сеансов hasMany отношение "ошибка.

Я посмотрел https://github.com/tgriesser/bookshelf/wiki/Plugin:-Model-Registry, но это делается с использованием синтаксиса pre-ES5.

Наверное, мне нужно убедиться, что класс «Журнал» доступен до того, как я назначил отношения hasMany, но застрял здесь.

Любые идеи?

Edit: Ведение

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

работает, но это выглядит плохо.

+1

Реестр Bookshelf это именно то, что вам нужно. Почему синтаксис Pre-ES5 является проблемой? Не можете ли вы его адаптировать? – DeadEye

+0

Нет примера о том, как это сделать с помощью синтаксиса класса. Кроме того, такие слова, как «Загрузите плагин на экземпляр Bookshelf с помощью Bookshelf.plugin (« registry »)». без разницы. Я не уверен, куда я должен добавить этот код. – Aris

ответ

1

Вы можете использовать регистр Книжной полки. Это точно соответствует вашим потребностям.

Вы можете загрузить плагин 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 так:

module.exports = { 
    session: db.bookshelf.model('Session', Session), 
    log: db.bookshelf.model('Log', Log), 
    db, 
}; 
Смежные вопросы