【发布时间】:2021-10-04 18:21:39
【问题描述】:
问题:console.log(res.data) 给出的结果与console.log(JSON.parse(res.request.response)) 不同。
我正在从我的 Next.js 应用程序向内部 API 发出发布请求。它是对返回列表对象的 REST 端点的请求。数据应如下所示:
[
{
"views": [ { "data1": 1 ...}, ...],
"otherViews": [ {"data2": 1, ...}, ...],
},
...
]
我正在以典型的then/catch 格式访问来自该请求的数据。所以
let internalServerResponse = axios.post(endpoint, body, config)
return internalServerResponse
.then(res => {
let errors = null;
let data = null;
if (res.data.errors) {
errors = res.data.errors;
} else {
data = res.data
}
return {
errors: errors,
data: data
}
} )
.catch(err => {
return {
errors: err,
data: null
}
})
问题出现在views 列表总是返回一个空列表,而otherViews 列表似乎不受影响。
{
"identifier": "...",
"views": [],
"otherViews": [
{
"field1": "...",
"field2": "...",
"field3": "..."
},
...
]
}
查看来自服务器的res.request.response,我看到views 列表实际上不是空的(如预期的那样),并且视图列表中的对象格式类似于otherViews 列表的格式.返回的响应 (res.request.response) 是有效的 JSON。
JSON.parse(res.request.response)的控制台日志输出:
{
"identifier": "...",
"views": [
{
"field1": "...",
"field2": "...",
"field3": "..."
},
...
],
"otherViews": [
{
"field1": "...",
"field2": "...",
"field3": "..."
},
...
]
}
我尝试了什么
为了调试,我试过了:
- 打印
res.data,给出缺失的视图列表 - 打印
JSON.parse(res.request.response)给出正确的对象 - 设置我的
data = JSON.parse(res.request.response)仍然以某种方式给出了缺少的视图列表
我完全被难住了。我有两个问题:
- 为什么 res.data 和 JSON.parse(res.request.response) 不同?
- 当我将它分配给变量时,值到底是如何变化的?
【问题讨论】:
-
确实很奇怪。您可以发布您的网络标签屏幕吗?是否启用了一些 axios 插件或拦截器?
-
感谢您的建议,但是网络标签的预览响应是正确的响应。仍然不确定为什么我无法访问
views列表。 -
你能提供一个minimal reproducible example吗?
标签: javascript json express axios next.js