gpt4 book ai didi

node.js - 记录 axios 请求和响应 header

转载 作者:行者123 更新时间:2023-12-03 08:11:26 25 4
gpt4 key购买 nike

我们需要记录 axios 将发送到远程主机的 HTTP 请求以及响应。这些数据将在数据库中存储几天,然后被自动删除。

我们正在寻找的日志记录生命周期:

// creates the session that joins both the request and response
function createSession (url: string): string;
// log the request message as sent
function logRequest (sessionId: string, headers: Record<string, any>, body: Record<string, any> | string);
// log the request message as received
function logResponse (sessionId: string, headers: Record<string, any>, body: Record<string, any> | string);
// close the session, recording the final status and any error message
function closeSession(sessionId: string, status: number, error?: string);

我们已经查看了请求和响应拦截器,但我们遇到的问题是请求拦截器是在 axios 添加所有要发送的 header 之前,而响应拦截器似乎无法访问该请求,能够将请求和响应关联起来。

无需通过代理引导所有这些来进行日志记录,您建议如何使用 axios 来完成此操作?

最佳答案

这是我通常做的事情:

在请求拦截器中,我使用一些 UUID 库(或者可能是 Node 的 crypto 核心模块)来生成 UUID,然后将其附加到 config 对象,如下所示请求 ID,例如 config.reqId。相同的配置对象应该可以在 response.config 中访问,或者如果发生错误,可以在 error.response.config 中访问,我可以从那里获取 reqId。然后,如果您有一些脚本来解析日志,您可以使用此 ID 关联请求和响应。

这里的缺点是,是的,可能不会记录准确的请求 header 。

此外,如果您只是在响应中查找请求对象,then they should be accessible in response.request, going from what I checked in the axios docs 。你可以尝试一下。

const axios = require("axios");
const getNewUuid = require("./someUuidGeneratorUtilFunction.js");
const logger = require('./yourChoiceOfLogger.js');

const config = {
BASE_URL: "https://your.baseurl.here"
}

const myAxiosInstance = axios.create({
baseURL: config.BASE_URL,
timeout: 30000,
})

myAxiosInstance.interceptors.request.use((config) => {
const customUuid = getNewUuid();
config.reqId = customUuid;
const message = {
reqId: customUuid,
time: Date.now(),
config: config
}

logger.info(message)
return config;
})

myAxiosInstance.interceptors.response.use((response) => {
const customUuid = response.config && response.config.reqId ? response.config.reqId : "";
const message = {
reqId: customUuid,
time: Date.now(),
status: response.status,
data: response.data,
headers: response.headers,
logMessage: "RESPONSE RECEIVED"
}
logger.info(message)
return response;
},(error) => {
const customUuid = error.response && error.response.config && error.response.config.reqId ? error.response.config.reqId : "";

const errorResponse = error.response ? error.response : {
status: null,
data: null,
headers: null
}
const message = {
reqId: customUuid,
time: Date.now(),
status: errorResponse.status,
data: errorResponse.data,
headers: errorResponse.headers,
logMessage: error.message || "ERROR"
}
logger.error(message)
return Promise.reject(error)
})

module.exports = myAxiosInstance;

关于node.js - 记录 axios 请求和响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70704988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com