Почему перо appsset метод appsset нарушает соединение websocket - PullRequest
0 голосов
/ 10 апреля 2019

В файле App.js это последние несколько строк:

app.configure(initialise)
app.configure(enableCronJobs)

module.exports = app

инициализация происходит отсюда (в файле app.js)

const initialise = require('./initialise')

файл инициализации выглядит следующим образом

module.exports = async (app: App) => {
    try {
        app.setup()

        await app.get('sequelizeSync')
        const { total: RolesCount } = await app.service('roles').find()

        if (RolesCount === 0) {
            await Promise.all(
                roles.map(role =>
                    app
                        .service('roles')
                        .create(role, { useSequelizeModel: true }),
                ),
            )
        }
    } catch (e) {
        console.log('initialise', app, e) // eslint-disable-line
    }
}

Я получаю следующую ошибку в консоли (и она повторяется):

error: Page not found {"type":"FeathersError","name":"NotFound","code":404,"className":"not-found","data":{"url":"/socket.io/?EIO=3&transport=websocket"},"errors":{}}

Действительная функция создания запросов работает, и данные вставляются в базу данных.

Соединение через веб-сокет разорвано, и любой клиент не может подключиться к службе, если у меня есть метод app.setup () внутри функции инициализации.

Мне нужно, чтобы была вызвана функция app.setup (), чтобы база данных была готова, в противном случае у меня появляется следующая ошибка:

relation {TABLE} does not exist

Любые предложения, советы и т.д ... приветствуются.

С уважением, Эмир

1 Ответ

2 голосов
/ 10 апреля 2019

setup предназначен для вызова с параметром server, который отсутствует в вашем коде. Когда вы звоните app.listen, вызывается app.setup, поэтому вы не хотите звонить setup здесь.

Вместо этого вы можете заменить app.setup своей версией, обязательно вызвав старую setup функцию.

module.exports = async (app: App) => {
    const oldSetup = app.setup;

    app.setup = function (...args) {
      const result = oldSetup.apply(this, ...args);
      try {
          await app.get('sequelizeSync')
          const { total: RolesCount } = await app.service('roles').find()

          if (RolesCount === 0) {
              await Promise.all(
                  roles.map(role =>
                      app
                          .service('roles')
                          .create(role, { useSequelizeModel: true }),
                  ),
              )
          }
      } catch (e) {
          console.log('initialise', app, e) // eslint-disable-line
      }
      return result;
    }
}
...