42 lines
948 B
PHP
42 lines
948 B
PHP
<?php
|
|
declare (strict_types = 1);
|
|
|
|
namespace app\api\middleware;
|
|
|
|
use Closure;
|
|
use think\Request;
|
|
use think\Response;
|
|
|
|
/**
|
|
* 响应时间中间件
|
|
* 计算接口耗时并将其添加到响应头中
|
|
*/
|
|
class ResponseTimeMiddleware
|
|
{
|
|
/**
|
|
* 处理请求
|
|
*
|
|
* @param Request $request
|
|
* @param Closure $next
|
|
* @return Response
|
|
*/
|
|
public function handle(Request $request, Closure $next)
|
|
{
|
|
// 记录开始时间(微秒)
|
|
$startTime = microtime(true);
|
|
|
|
// 执行请求
|
|
$response = $next($request);
|
|
|
|
// 计算耗时(毫秒)
|
|
$endTime = microtime(true);
|
|
$executionTime = round(($endTime - $startTime) * 1000, 2);
|
|
|
|
// 将耗时添加到响应头
|
|
if ($response instanceof Response) {
|
|
$response->header(['X-Response-Time' => $executionTime . 'ms']);
|
|
}
|
|
|
|
return $response;
|
|
}
|
|
}
|