2017-01-24 8 views
0

Ich habe den folgenden Code:Bücherregal zirkuläre Abhängigkeit mit 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; 

und

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 Beziehung funktioniert, aber wenn ich hasMany versuchen, erhalte ich: „Unbehandelte Ablehnung Fehler: Ein gültiger Das Zielmodell muss für die Sitzungen hasMany relation "error definiert werden.

Ich habe mir https://github.com/tgriesser/bookshelf/wiki/Plugin:-Model-Registry angesehen, aber es wird mit Pre-ES5 Syntax gemacht.

Ich denke, ich muss sicherstellen, dass "Log" -Klasse verfügbar ist, bevor ich in eine hasMany Beziehung ernenne, aber hier stecken.

Irgendwelche Ideen?

Edit: Doing

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

funktioniert, aber es sieht schlecht aus.

+1

Das Bücherregal Registrierung ist genau das, was Sie brauchen. Warum ist die Pre-ES5-Syntax ein Problem? Kannst du es nicht anpassen? – DeadEye

+0

Es gibt kein Beispiel dafür, wie man es mit der Klassensyntax macht. Wörter wie "Laden Sie das Plug-in auf Ihrer Bookshelf-Instanz mithilfe von Bookshelf.plugin ('registry')." macht keinen Sinn. Ich bin mir nicht sicher, wo ich diesen Code einfügen sollte. – Aris

Antwort

1

Sie können Bookshelf-Registrierung verwenden. Es passt genau zu Ihren Bedürfnissen.

Sie können Bücherregal Registrierung Plugin wie folgt laden:

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, 
}; 

Dann registrieren Sie Ihre Modelle in module.exports wie folgt aus:

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