В 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!