Next JS 14 – Подключение MySQL к схеме нагрузки

Вопрос или проблема

У меня установлена NextJS 14. У меня настроено соединение с MySQL и есть файл schema.sql, который я загружаю. В настоящее время я загружаю schema.sql по маршруту app/dashboard, но я не хочу выполнять свой SQL-код при каждом запросе на страницу:

CREATE TABLE IF NOT EXISTS clients (....);

Как мне загрузить схему только один раз, когда сервер NodeJS запущен, а не при каждом запросе клиента? Насколько я понимаю, использование файла server.js не рекомендуется. Однако я не вижу другого решения?

Ответ или решение

Чтобы загружать вашу схему SQL в MySQL только один раз при запуске сервера, а не при каждом запросе клиента, вы можете использовать подход с инициализацией базы данных в отдельном файле. В Next.js 14 рекомендуется использовать функцию next.config.js и специальные инициализационные скрипты.

Вот пошаговое руководство о том, как это сделать:

  1. Создайте файл инициализации базы данных:
    Создайте новый файл, например initDB.js в корне вашего проекта или в отдельной папке, например в lib:

    // lib/initDB.js
    import mysql from 'mysql2/promise';
    import fs from 'fs';
    import path from 'path';
    
    const dbConfig = {
       host: 'localhost',
       user: 'your_username',
       password: 'your_password',
       database: 'your_database',
    };
    
    const initDB = async () => {
       const connection = await mysql.createConnection(dbConfig);
       const schemaPath = path.join(__dirname, 'schema.sql');
       const schema = fs.readFileSync(schemaPath, 'utf8');
    
       await connection.query(schema);
       console.log('Database schema loaded successfully.');
    
       await connection.end();
    };
    
    export default initDB;
  2. Загрузите схему при запуске сервера:
    Измените ваш файл next.config.js, чтобы вызывать initDB при старте приложения.

    // next.config.js
    import initDB from './lib/initDB';
    
    (async () => {
       try {
           await initDB();
       } catch (error) {
           console.error('Error initializing the database:', error);
       }
    })();
    
    const nextConfig = {
       // ваши другие настройки next.config.js
    };
    
    export default nextConfig;

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

  3. Убедитесь, что вы обрабатываете ошибки:
    Важно обрабатывать любые ошибки, которые могут возникнуть при подключении к базе данных или выполнении SQL-запросов. Вы можете улучшить логирование, чтобы упростить отладку.

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

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

Оцените материал
Добавить комментарий

Капча загружается...