Перейти к содержимому

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
})

Объект 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
})
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)
})