Запуск Sequelize Migration и Node Server по одной команде не запускает сервер - PullRequest
0 голосов
/ 08 октября 2019

Если я попытаюсь запустить свою миграцию сиквелизов, а затем запустить свой Node-сервер с помощью той же команды, я столкнусь с проблемой того, что мой сервер никогда не запустится. Если миграции уже выполнялись ранее, команда sequelize db:migrate не проходит мимо: «Миграции не были выполнены, схема базы данных уже обновлена». сообщение, и моя вторая команда никогда не сможет работать. Если миграция не выполнялась раньше, все выполняется правильно по порядку.

Это моя npm start команда: sequelize db:migrate && node index.js

Я предполагаю, что внутренне sequelize db:migrate ничего не разрешает вВ случае, когда отображается это сообщение журнала, есть ли способ, которым я могу «прекратить» эту команду через некоторое время и перейти к моей команде узла?

1 Ответ

0 голосов
/ 08 октября 2019

Для всех, кто сталкивался с этой проблемой, я так решил ее.

1) Создайте новый файл, который вы будете запускать в своем скрипте npm.

2) Iв итоге завернул вызов процесса в child_process exec, а затем завершил процесс, когда я получил вышеупомянутое сообщение console.log, так как сама библиотека ничего не разрешает на этом этапе.

// myRuntimeFile.js --> Make sure this file is in the same directory where your .sequelizerc file lives

(async()=> {
  const { exec } = require('child_process');

  await new Promise((resolve, reject) => {
    const migrate = exec(
      'sequelize db:migrate',
      { env: process.env },
      (err, stdout, stderr) => {
        resolve();
      }
    );

    // Listen for the console.log message and kill the process to proceed to the next step in the npm script
    migrate.stdout.on('data', (data) => {
      console.log(data);
      if (data.indexOf('No migrations were executed, database schema was already up to date.') !== -1) {
        migrate.kill();
      }
    });
  });
})();

Очевидно, что приведенный выше код не идеален, но, надеюсь, он будет временным, пока внутренности этого крайнего случая не будут должным образом разрешены в обещании.

3) Обновите ваш сценарий npm следующим образом:

"start": "node myRuntimeFile.js && node index.js"

Или, если вы работаете на компьютере с Windows и не можете использовать &&, вы можете использовать библиотеку npm-run-all.

...