中间件

中间件(Middleware)是一个在每次请求进入 FastAPI 应用时都会被执行的函数。
它在请求到达实际的路径操作(路由处理函数)之前运行,并且在响应返回给客户端之前再运行一次。

作用: 为每个请求添加统一的处理逻辑(记录日志、身份认证、跨域、设置响应头、性能监控等)

@app.middleware('http')
async def add_process_time_header(request: Request, call_next):
print('process_time_header called')
response = await call_next(request)
print('process_time_header called with response {}'.format(response))

代码如上 在访问根路径时会报错

原因: 缺少return 框架后面会把“返回的响应”当成可执行对象继续处理;现在拿到的是 None ,所以报:

TypeError: ‘NoneType’ object is not callable

修改代码

@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
print("process_time_header called")
response = await call_next(request)
print("process_time_header called with response {}".format(response))
return response

再次访问 控制台输出日志

process_time_header called
process_time_header called with response
INFO: 127.0.0.1:60206 – “GET / HTTP/1.1” 200 OK

@app.middleware("http")
async def add_process_time_header(request: Request, call_next):
print("process_time_header called")
response = await call_next(request)
print("process_time_header called with response {}".format(response))
return response

@app.middleware("http")
async def middleware_test(request,call):
print("middleware_test start")
res = await call(request)
print("middleware_test end")
return res

多个中间件执行顺序是由下而上的

middleware_test start
process_time_header called
process_time_header called with response
middleware_test end
INFO: 127.0.0.1:60431 – “GET / HTTP/1.1” 200 OK

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注