14. Middleware
Middleware в Prisma — это функции-перехватчики, которые выполняются до и после каждого запроса к базе данных. Они позволяют реализовать сквозную логику: логирование, мягкое удаление, автоматическое обновление временных меток и многое другое.
Базовый синтаксис
Заголовок раздела «Базовый синтаксис»prisma.$use(async (params, next) => { // Логика ДО выполнения запроса const before = Date.now()
const result = await next(params) // выполнить запрос
// Логика ПОСЛЕ выполнения запроса const after = Date.now() console.log(`Запрос ${params.model}.${params.action} занял ${after - before}мс`)
return result})Параметры middleware
Заголовок раздела «Параметры middleware»Объект params содержит:
params.model— модель (например,'User')params.action— операция ('findMany','create','delete', и т.д.)params.args— аргументы запроса (можно модифицировать!)params.dataPath— путь к данным
Логирование запросов
Заголовок раздела «Логирование запросов»prisma.$use(async (params, next) => { const start = Date.now() const result = await next(params) console.log(`${params.model}.${params.action} — ${Date.now() - start}ms`) return result})Мягкое удаление через middleware
Заголовок раздела «Мягкое удаление через middleware»prisma.$use(async (params, next) => { if (params.model === 'User' && params.action === 'delete') { // Перехватить delete и заменить на update params.action = 'update' params.args.data = { deletedAt: new Date() } } return next(params)})Автоматические метки времени
Заголовок раздела «Автоматические метки времени»prisma.$use(async (params, next) => { if (params.action === 'create') { params.args.data.createdAt = new Date() } if (params.action === 'update') { params.args.data.updatedAt = new Date() } return next(params)})