Как инициализировать один раз подключение к бд или другим ресурсам и расшарить это на весь API в Next JS?

В Next.js, вы можете инициализировать подключение к базе данных или другим ресурсам и расшарить его на весь ваш API, используя концепцию глобального состояния и middleware.

Сначала, создайте модуль для инициализации подключения в отдельном файле, скажем, db.js:

// db.js
import { connect } from 'your-database-library';

let dbConnection;

export const connectToDatabase = async () => {
  if (dbConnection) {
    return dbConnection;
  }

  // Инициализация подключения к базе данных
  dbConnection = await connect({
    // настройки подключения к вашей базе данных
  });

  return dbConnection;
};

Ваше подключение к базе данных в данном случае будет создано только один раз - при первом вызове connectToDatabase(), а затем сохранено в переменной dbConnection.

Затем, создайте middleware для расшаривания этого подключения с вашим API. Создайте новый файл, например, databaseMiddleware.js:

// databaseMiddleware.js
import { connectToDatabase } from './db.js';

export const databaseMiddleware = async (req, res, next) => {
  try {
    // Подключение к базе данных
    req.db = await connectToDatabase();
    next();
  } catch (error) {
    next(error);
  }
};

Этот middleware принимает запрос (req), подключается к базе данных с помощью функции connectToDatabase() и сохраняет подключение в req.db. Затем он передает управление следующему middleware или обработчику маршрута с помощью функции next().

Наконец, примените databaseMiddleware к вашему API в файле api.js или аналогичном месте:

// api.js
import { databaseMiddleware } from './databaseMiddleware.js';

const handler = (req, res) => {
  // Получите доступ к подключению к базе данных через req.db и выполните запросы или операции с базой данных
};

export default function api(req, res) {
  // Примените databaseMiddleware перед обработчиком api
  databaseMiddleware(req, res, () => handler(req, res));
}

Теперь ваше подключение к базе данных будет инициализировано один раз при каждом обращении к API, сохранено в переменной req.db и будет доступно для использования в ваших обработчиках маршрута.

Надеюсь, что это помогло вам понять, как инициализировать подключение к базе данных или другим ресурсам один раз и расшарить его на весь ваш API в Next.js!