ES5 的书架循环依赖
Bookshelf circular dependency with 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
时,我得到:"Unhandled rejection Error: A valid target model must be defined for the sessions hasMany relation" 错误。
我看过 https://github.com/tgriesser/bookshelf/wiki/Plugin:-Model-Registry 但它是使用 ES5 之前的语法完成的。
我想我需要确保 "Log" class 在指定 hasMany 关系之前可用但卡在这里。
有什么想法吗?
编辑:做
logs() {
var log = require("./Log");
return this.hasMany(log);
}
有效,但看起来很糟糕。
您可以使用 Bookshelf 注册表。它完全符合您的需求。
您可以像这样加载 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,
};
我有以下代码:
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
时,我得到:"Unhandled rejection Error: A valid target model must be defined for the sessions hasMany relation" 错误。
我看过 https://github.com/tgriesser/bookshelf/wiki/Plugin:-Model-Registry 但它是使用 ES5 之前的语法完成的。
我想我需要确保 "Log" class 在指定 hasMany 关系之前可用但卡在这里。
有什么想法吗?
编辑:做
logs() {
var log = require("./Log");
return this.hasMany(log);
}
有效,但看起来很糟糕。
您可以使用 Bookshelf 注册表。它完全符合您的需求。
您可以像这样加载 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,
};