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实例上加载插件”这样的词毫无意义。我不确定应该在哪里添加代码。