Context 正在创建一个简单的 Python 代理程序,用于汇总各种不同的指标,以供 Prometheus 进行抓取。我正在使用中间件来更新这些值。我发现有两种定义 aiohttp 中间件的方法,它们都可以工作。我想更好地了解它们之间的区别,并且您会推荐哪一种(或者可能还有其他我尚未发现的方法!)
async def mw1(app, handler):
async def middleware_handler(request):
print('mw1 start')
response = await handler(request)
print('mw1 end')
return response
return middleware_handler
@web.middleware
async def mw2(request, handler):
print('mw2 start')
response = await handler(request)
print('mw2 end')
return response
app = web.Application(middlewares=[mw1, mw2])
这两者都被调用并且按预期工作。但是我不太理解为什么一个使用'app'作为参数,另一个使用'request'的重要性。
在mw2()中,如果需要,可以通过request.app访问到'app'。在mw1()中,'request'似乎像魔术一样出现在内部函数中...
只是想理解发生了什么。