在 AdonisJs 中间件中处理响应

Handle response in AdonisJs middleware

我正在尝试将所有入站请求记录到我的数据库中。为此,我创建了一个中间件,我在其中使用数据触发事件,然后创建一个处理数据并将其保存在数据库中的监听器。

我可以记录所有请求信息,但无法记录响应信息。

这是我的中间件:

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

之后没有任何反应

我怎样才能得到这个中间件中的响应内容?

阿多尼斯版本:4.1

应该在调用 next 之前放置结束事件处理程序

 ctx.response.response.on('finish', () => {
     console.log(ctx.response.response.statusCode)
 })
 await next()