Вопрос или проблема
У меня установлена 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
и специальные инициализационные скрипты.
Вот пошаговое руководство о том, как это сделать:
-
Создайте файл инициализации базы данных:
Создайте новый файл, например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;
-
Загрузите схему при запуске сервера:
Измените ваш файл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
. -
Убедитесь, что вы обрабатываете ошибки:
Важно обрабатывать любые ошибки, которые могут возникнуть при подключении к базе данных или выполнении SQL-запросов. Вы можете улучшить логирование, чтобы упростить отладку. -
Перезапустите ваш сервер:
После внесения этих изменений вам нужно будет перезапустить ваш сервер, чтобы изменения вступили в силу. После этого ваша схема будет загружена один раз при старте приложения, и не будет выполняться на каждом клиентском запросе.
Таким образом, вы обеспечите более эффективное использование ресурсов, загружая схему только один раз, и избежите избыточных операций, которые могут замедлить ваше приложение.