我有以下代码:
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 relation"错误。
我看了一下https://github.com/tgriesser/bookshelf/wiki/Plugin:-Model-Registry,但它是使用pre-ES5语法完成的。
我想我需要确保" Log"在我指定一个hasMany关系之前,这个课程已经可以使用了。
有什么想法吗?
编辑:正在执行
logs() {
var log = require("./Log");
return this.hasMany(log);
}
有效,但看起来很糟糕。
答案 0 :(得分:2)
您可以使用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,
};