从 AWS Lambda 捕获原始 axios 请求
Capture raw axios request from AWS Lambda
我有代码调用供应商 API 从 AWS Lambda 内部通过 axios 对文件进行表单数据上传。调用 returns 出现 400 错误。如果我 运行 在本地使用相同节点版本 v14 的代码,它就可以工作。我想捕获两个原始请求并比较它们的差异。如何捕获这两个原始请求?我试过使用 ngrok 和 pipedream,但它们不显示原始文件,而是解码请求和文件。
let response = null;
try {
const newFile = fs.createReadStream(doc);
const formData = new FormData();
formData.append("file", newFile);
formData.append("url", url);
const headers = {
Authorization: "Bearer " + token,
...formData.getHeaders(),
};
console.log("Headers: ", headers);
response = await axios.post(`${APIBASE}/file/FileUpload`, formData, {
headers,
});
console.log("file upload response", response);
} catch (err) {
console.log("fileupload error at API", err);
}
您无法在网络级别捕获请求,因为这完全由 AWS 控制。在 VPC 中 运行 时,也许有办法做到这一点,但我不这么认为。
您可以简单地使用诸如 axios debug logger 之类的工具在请求 made/after 响应到达之前打印出所有请求和响应内容(包括 headers 等) .这可能会提供更多关于问题出在哪里的信息。
至于问题的原因,很难在那里帮助您,因为您没有分享错误消息,我们也不知道您尝试呼叫的 API。
您可以只使用自定义请求拦截器并以这种方式询问请求。
有多种调试方式
- axios 调试记录器。
- AWS Cloud watch,您可以在其中查看所有日志。你可以捕获请求
和回应。
- 使用 postman 调用 prod lambda 端点并验证响应。
我有代码调用供应商 API 从 AWS Lambda 内部通过 axios 对文件进行表单数据上传。调用 returns 出现 400 错误。如果我 运行 在本地使用相同节点版本 v14 的代码,它就可以工作。我想捕获两个原始请求并比较它们的差异。如何捕获这两个原始请求?我试过使用 ngrok 和 pipedream,但它们不显示原始文件,而是解码请求和文件。
let response = null;
try {
const newFile = fs.createReadStream(doc);
const formData = new FormData();
formData.append("file", newFile);
formData.append("url", url);
const headers = {
Authorization: "Bearer " + token,
...formData.getHeaders(),
};
console.log("Headers: ", headers);
response = await axios.post(`${APIBASE}/file/FileUpload`, formData, {
headers,
});
console.log("file upload response", response);
} catch (err) {
console.log("fileupload error at API", err);
}
您无法在网络级别捕获请求,因为这完全由 AWS 控制。在 VPC 中 运行 时,也许有办法做到这一点,但我不这么认为。
您可以简单地使用诸如 axios debug logger 之类的工具在请求 made/after 响应到达之前打印出所有请求和响应内容(包括 headers 等) .这可能会提供更多关于问题出在哪里的信息。
至于问题的原因,很难在那里帮助您,因为您没有分享错误消息,我们也不知道您尝试呼叫的 API。
您可以只使用自定义请求拦截器并以这种方式询问请求。
有多种调试方式
- axios 调试记录器。
- AWS Cloud watch,您可以在其中查看所有日志。你可以捕获请求 和回应。
- 使用 postman 调用 prod lambda 端点并验证响应。