在 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()
我正在尝试将所有入站请求记录到我的数据库中。为此,我创建了一个中间件,我在其中使用数据触发事件,然后创建一个处理数据并将其保存在数据库中的监听器。
我可以记录所有请求信息,但无法记录响应信息。
这是我的中间件:
'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()