Я пытаюсь установить некоторые исходные данные для mysql базы данных на сервере перьев.
Я хочу сделать это после того, как вся созданная модель и служба инициализированы , где мне это сделать?
Я хочу сделать это приложение. js с app.configure()
вот так:
...
const data = require('./defaultData');
...
// Set up our services (see `services/index.js`)
app.configure(services);
// Set initial data to database
app.configure(data);
...
И это не сработало, когда я запускаю его первый раз, это выдает ошибку:
Unhandled Rejection at: Promise {"hook":{"type":"before","method":"create","path":"roles","params":{},"data":{"name":"super","role":65535,"user":65535,"scene":65535}}}
Но когда я перезагружаю сервер это работает хорошо и создает строку для меня, потому что таблица была создана в прошлый раз.
Я также пытался поместить код в roles.class.js
с помощью setup()
метода:
...
const data = require('../../defaultData');
...
setup(app, path) {
data(app);
}
...
Но получил похожая ошибка Unhandled Rejection at: Promise
и после этой ошибки все таблицы созданы.
My defaultData.js
:
const { Mask } = require('./services/roles/roles.class.js');
module.exports = function(app) {
app.services['roles'].create({
name: 'super',
role: Mask.super,
user: Mask.super,
scene: Mask.super,
})
}
Я могу сделать это в role.model. js в операторе then:
...
const data = require('../defaultData');
...
.then(() => {
data(app);
console.log(`Created ${tableName} table`);
})
...
Итак, пока пишу этот вопрос, я думаю, что проблема была решена .
Для заполнения разных таблиц внешними ключами я просто добавляю параметр serviceName в defaultData метод, поэтому он выглядит следующим образом:
defaultData.js
:
const { Mask } = require('./services/roles/roles.class.js');
module.exports = async function(app, serviceName) {
if(serviceName === 'roles') {
app.services['roles'].create({
name: 'super',
role: Mask.super,
user: Mask.super,
scene: Mask.super,
});
} else if(serviceName === 'users') {
const roleId = (await app.services['roles'].find({roleName: 'super'})).id;
app.services['users'].create({
login: 'super',
password: 'secret',
roleId: roleId,
})
}
}
roles.model.js
:
...
const data = require('../../defaultData');
...
setup(app, path) {
data(app, 'roles');
}
...
users.model.js
:
...
const data = require('../../defaultData');
...
setup(app, path) {
data(app, 'users');
}
...
Я не нашел решения с поиском, поэтому я оставляю это здесь с надеждой, что это кому-то поможет.