【问题标题】:Why Does Response Change From Post Request?为什么响应从发布请求发生变化?
【发布时间】: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


【解决方案1】:

答案:

问题已解决。由于我传递结果对象的方式,我正在过滤原始res.data 对象中引用的views 列表。

请参考:Does JavaScript pass by reference?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-07
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 1970-01-01
    相关资源
    最近更新 更多