Таблицы удаляются при запуске узла server.js и повторном заполнении базы данных. Sequelize - PullRequest
0 голосов
/ 10 ноября 2018

Я сталкиваюсь с ошибкой, когда при выполнении запроса get в узле к моей базе данных я получаю пустой массив. Поэтому я смотрю в журнале консоли, и он говорит, что он удаляет все таблицы, если они существуют, а затем создает их, но начальный файл не работает. Я могу запустить «npm run seed» вне сервера, и он будет заполнять базу данных, но при запуске узла server.js он будет сбрасываться и не заполняться. Я даже пытался поместить путь к семени внутри пакета. Json «start»: чтобы и начальный, и сервер работали, но не повезло. Приложение работало отлично, но один из членов моей команды случайно подтолкнул к мастеру, и оно испортило приложение, я не знаю, что испортилось, потому что это работало до git messup. Я сейчас создал новый репо и получаю ту же проблему.

 //package.json
 "start": "node server.js ./seeds/seed-db.js"


    //seed-db.js
     const db = require("../models");
    const productSeeds = require("./seed-products.json");

     db.sequelize.sync({ force: true }).then(function() {
      db.Market.bulkCreate([
     {
  name: "Cotton Mill Farmers Market",
  address: "401 Rome St.",
  city: "Carrollton",
  state: "GA",
  zip: "30117"
 }
    ]).then(function(dbMarkets) {
//COTTON MILL FARMERS MARKET STOCK
   dbMarkets[0].createProduct(productSeeds.broccoli).then(function() {
  db.sequelize.close();
   });


dbMarkets[1].createProduct(productSeeds.broccoli).then(function() 
 {
  db.sequelize.close();
      });
       });
    });

// консоль

Выполнение (по умолчанию): DROP TABLE ЕСЛИ СУЩЕСТВУЕТ MarketProduct; Выполнение (по умолчанию): DROP TABLE, ЕСЛИ СУЩЕСТВУЕТ Product; Выполнение (по умолчанию): DROP TABLE, ЕСЛИ СУЩЕСТВУЕТ Markets; Выполнение (по умолчанию): DROP TABLE, ЕСЛИ СУЩЕСТВУЕТ Markets; Выполнение (по умолчанию): СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ Markets (id INTEGER NOT NULL auto_increment, name VARCHAR (255), address VARCHAR (255), city VARCHAR (255), state VARCHAR (255), zip INTEGER, ПЕРВИЧНЫЙ КЛЮЧ (id)) ДВИГАТЕЛЬ = InnoDB; Выполнение (по умолчанию): ПОКАЗАТЬ ИНДЕКС ОТ Markets ОТ grocerEZ_db Выполнение (по умолчанию): DROP TABLE, ЕСЛИ СУЩЕСТВУЕТ Product; Выполнение (по умолчанию): СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ Product (id INTEGER NOT NULL auto_increment, name VARCHAR (255), category ENUM («мясо», «фрукты», «овощи», «разное») ), isOrganic TINYINT (1), ПЕРВИЧНЫЙ КЛЮЧ (id)) ДВИГАТЕЛЬ = InnoDB; Выполнение (по умолчанию): ПОКАЗАТЬ ИНДЕКС ОТ Product ОТ grocerEZ_db Выполнение (по умолчанию): DROP TABLE, ЕСЛИ СУЩЕСТВУЕТ MarketProduct; Выполнение (по умолчанию): СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ MarketProduct (createdAt ДАННЫЙ НЕ НЕДЕЙСТВИТЕЛЕН, updatedAt ДАННЫЙ НЕ НУЛ, MarketId ЦЕЛЫЙ, ProductId ЦЕЛЫЙ, ПЕРВИЧНЫЙ КЛЮЧ (MarketId, ProductId), ИНОСТРАННЫЙ КЛЮЧ (MarketId) ССЫЛКИ Markets (id) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИИ КАСКАД, ИНОСТРАННЫЙ КЛЮЧ (ProductId) НА ССЫЛКАХ Product (id) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИИ КАСКАД) ENGINE = InnoDB; Выполнение (по умолчанию): ПОКАЗАТЬ ИНДЕКС ОТ MarketProduct ОТ grocerEZ_db Приложение прослушивания на порт 3000

1 Ответ

0 голосов
/ 10 ноября 2018

Просто изменить

db.sequelize.sync({ force: true }) // <-- Forces table to drop and create again

до

db.sequelize.sync({ force: false , alter : true })

ДОК .:

Если сила истинна, каждая Модель будет запускать DROP TABLE ЕСЛИ СУЩЕСТВУЕТ, прежде чем пытается создать собственную таблицу

Изменяет таблицы в соответствии с моделями. Не рекомендуется для производственного использования. Удаляет данные в столбцах, которые были удалены или изменили их тип в модель.


ПРИМЕЧАНИЕ:

db.sequelize.sync, это должно выполняться только один раз, когда вы хотите создать / изменить таблицу на основе изменений, которые вы сделали на модели, предложил бы поместить это в отдельный файл и запустить его, когда он необходимо.

Вот как вы должны запускать запрос, проверяя соединение, а не запуская синхронизация,

db.sequelize
.authenticate()
.then(() => {
    console.log('Connection has been established successfully.');
})
.catch(err => {
    console.error('Unable to connect to the database:', err);
});
...