中间件(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












