Чтобы сделать мой код более читабельным, я пытаюсь переместить весь код, связанный с базой данных, в один файл.и используйте Sequelize как ORM.Я хотел бы, чтобы этот файл, когда включен, предоставлял готовую к использованию базу данных.Схемы таблиц также управляются Sequelize, поэтому я использую метод sync()
для создания таблиц при первом запуске.К сожалению, когда я запускаю приложение в первый раз, я получаю сообщение об ошибке, что таблица не существует при использовании этого кода:
Файл: test.js
const database = require('./dbInit');
(async () => {
await database.testTable.max('id').then((maxId) => {
console.log(maxId);
});
})();
Файл:dbInit.js
const Sequelize = require('sequelize');
const sequelize = new Sequelize('mysql://root:root@localhost:3306/test');
const testTable = sequelize.import('testTable');
const database = {
sequelize: sequelize,
testTable: testTable,
};
sequelize
.authenticate()
.then(() => {
console.log('Connection to the database has been established successfully.');
})
.catch(error => {
console.error(error);
});
sequelize.sync();
module.exports = database;
Файл: testTable.js
const Sequelize = require('sequelize');
module.exports = (sequelize, DataTypes) => {
return sequelize.define('testTable',
{
id: {
type: Sequelize.BIGINT(19).UNSIGNED,
primaryKey: true,
autoIncrement: false,
}
}
);
};
Когда я запускаю код как есть, без созданных таблиц, я вижу из журналов, что запрос выполняется раньшесоединение с базой данных доступно:
> node .\test.js
Executing (default): SELECT 1+1 AS result
Executing (default): SELECT max(`id`) AS `max` FROM `testTables` AS `testTable`;
Connection to the database has been established successfully.
(node:1572) UnhandledPromiseRejectionWarning: SequelizeDatabaseError: Table 'test.testtables' doesn't exist
Я нашел способ заставить его работать, добавив это как раз перед вызовом в БД (в test.js перед вызовом max('id')
):
await database.sequelize.sync();
Есть ли другой способ сделать модуль dbInit полностью независимым и не добавлять этот вызов sync()
во все другие файлы, для которых потребуется подключение к базе данных?
I 'Мы искали загрузку модуля синхронизации, но пока это не представляется возможным.