Модели Thinky в отдельных файлах: как обрабатывать циклические / циклические зависимости
Я попытался последовать этому примеру, но мне не повезло.
У меня есть модель пользователя в файле user.js:
import thinky from './thinky';
let type = thinky.type;
let User = thinky.createModel('User', {
id: type.string(),
username: type.string(),
});
export default User;
let Game = require('./game');
User.hasAndBelongsToMany(Game, "games", "id", "id");
Модель игры в файле game.js:
import thinky from './thinky';
let type = thinky.type;
let Game = thinky.createModel('Game', {
id: type.string(),
host: type.string()
});
export default Game;
let User = require('./user');
Game.hasAndBelongsToMany(User, "players", "id", "id");
Когда я пытаюсь импортировать их в файл test.js, где я создаю экземпляры User и Game, я получаю First argument of hasAndBelongsToMany must be a Model
Я пытался написать его без синтаксиса ES6, до сих пор не работает...
3 ответа
Решение
Я мой пример, если вы измените экспорт по умолчанию для module.exports, все должно работать
Нам нужно избегать циклической ссылки, так что..
user.js
import thinky from './thinky';
let type = thinky.type;
let User = thinky.createModel('User', {
id: type.string(),
username: type.string(),
});
export default User;
game.js
import thinky from './thinky';
let type = thinky.type;
let Game = thinky.createModel('Game', {
id: type.string(),
host: type.string()
});
export default Game;
index.js
import User from './user';
import Game from './game';
Game.hasAndBelongsToMany(User, "players", "id", "id");
User.hasAndBelongsToMany(Game, "games", "id", "id");
export {User, Game};
Вы также можете попробовать этот загрузчик, предназначенный для самой загрузки нескольких определений моделей и сделать их доступными для вашего приложения.