#backend #middleware #adonis.js #adonisjs-ace
#серверная часть #промежуточное программное обеспечение #adonis.js #adonisjs-ace
Вопрос:
Я пытаюсь регистрировать все входящие запросы в свою базу данных. Для этого я создал промежуточное программное обеспечение, в котором я запускаю событие с данными, а затем прослушиватель, который обрабатывает данные и сохраняет их в базе данных.
Я могу зарегистрировать всю информацию о запросе, но я не могу зарегистрировать информацию об ответе.
Это мое промежуточное программное обеспечение:
'use strict'
/** @typedef {import('@adonisjs/framework/src/Request')} Request */
/** @typedef {import('@adonisjs/framework/src/Response')} Response */
/** @typedef {import('@adonisjs/framework/src/View')} View */
const Event = use('Event')
class InboundRequestLogger {
/**
* @param {object} ctx
* @param {Request} ctx.request
* @param {Response} ctx.response
* @param {Function} next
*/
async handle({request, response}, next) {
Event.fire('new::inboundRequest', {
'method': request.method(),
'url': request.originalUrl(),
'ip': request.ip(),
'headers': request.headers(),
'body': request.all(),
'is_ajax': request.ajax()
})
// call next to advance the request
await next()
}
}
module.exports = InboundRequestLogger
Проблема в том, что я не знаю, как запустить next()
, а затем проверить ответ (например, код состояния).
Я пытался сделать так:
class MyMiddleware {
async handle (ctx, next) {
await next()
ctx.response.response.on('finish', () => {
console.log(ctx.response.response.statusCode)
})
}
}
Но ничего не происходит после await next()
Как я могу получить материал для ответа внутри этого промежуточного программного обеспечения?
Версия Adonis: 4.1
Ответ №1:
конечный обработчик события должен быть установлен перед вызовом next
ctx.response.response.on('finish', () => {
console.log(ctx.response.response.statusCode)
})
await next()