NOT WORKING EXAMPLE 假设我想管理和导入拦截器,我想在单独的文件logTimeInterceptor.js中定义它们:
export const responseTimeInterceptor = (response) => {
// to avoid overwriting if another interceptor
// already defined the same object (meta)
response.meta = response.meta || {}
response.meta.requestStartedAt = new Date().getTime()
return response
}
export const logResponseTimeInterceptor = ((response) => {
// Logs response time - only for successful requests
console.log(
`📡 API | Execution time for: ${response.config.url} - ${
new Date().getTime() - response.config.meta.requestStartedAt
} ms`
)
return response
},
// Support for failed requests
// Handle 4xx & 5xx responses
(response) => {
console.error(
`📡 API | Execution time for: ${response.config.url} - ${
new Date().getTime() - response.config.meta.requestStartedAt
} ms`
)
throw response
}
)
然后我导入它们,并以httpClient.js的给定示例的方式使用它们:
import axios from 'axios'
import { ApiSettings } from '@/api/config'
import {
responseTimeInterceptor,
logResponseTimeInterceptor
} from '@/api/interceptors/logTimeInterceptor'
// ============== A P I C L I E N T =============
const httpClient = axios.create(ApiSettings)
// ============== A P I I N T E R C E P T O R S =============
httpClient.interceptors.request.use(authInterceptor)
httpClient.interceptors.response.use(
responseTimeInterceptor,
logResponseTimeInterceptor,
)
export default httpClient
9条答案
按热度按时间ddhy6vgd1#
您可以使用axios的拦截器概念。
请求拦截器将设置startTime
响应拦截器将设置endTime并计算持续时间
sh7euo9m2#
这是我的解决方案,通过在拦截器中设置头:
q9yhzks03#
在@user3653268上捎带--我修改了他们的答案,以便与react钩子一起使用,并使用模来显示x.xxx秒数。
i7uq4tfw4#
下面是另一种方法:
mbskvtky5#
使用async \ await可以轻松地完成此操作,但并不理想:
这将是关于axios调用的时间。不是那么理想,但显示和易于实现
yzckvree6#
另一个简单的方法是:
whhtz7ly7#
它的方式很久以后,但这是我的简单变通办法
这是我解决方法
vaj7vani8#
实际上,您可以通过“x-response-time”头来获得它,该头是从axios请求的响应中获得的
bvpmtnay9#
NOT WORKING EXAMPLE
假设我想管理和导入拦截器,我想在单独的文件
logTimeInterceptor.js
中定义它们:然后我导入它们,并以
httpClient.js
的给定示例的方式使用它们:但是这些拦截器不能作为导入一起工作,我认为它们必须在httpClient文件中保持完整。