Есть ли способ вызвать метод создания сервиса после создания модели в перьях? - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь установить некоторые исходные данные для 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');
  }
...

Я не нашел решения с поиском, поэтому я оставляю это здесь с надеждой, что это кому-то поможет.

...