处理AdonisJs中间件中的响应

问题描述

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

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

这是我的中间件:

'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

解决方法

结束事件处理程序应该放在调用下一个

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...