Обрабатывает ответ в промежуточном программном обеспечении AdonisJs

#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()