axios让我在发送数据时将循环结构转换为json错误

pw9qyyiw  于 2023-10-18  发布在  iOS
关注(0)|答案(6)|浏览(111)

代码如下:

axios.post('https://api.sandbox.xyz.com/v1/order/new', JSON.stringify({
            "request": "/v1/order/new",
            "nonce": 123462,

            "client_order_id": "20150102-4738721",
            "symbol": "btcusd",
            "amount": "1.01",
            "price": "11.13",
            "side": "buy",
            "type": "exchange limit"
        }), config)
        .then(function(response) {
            console.log(response);
            res.json({
                data: JSON.stringify(response)
            })
        })
        .catch(function(error) {
            console.log(error);
            res.send({
                status: '500',
                message: error
            })
        });

现在它说Unhandled promise rejection (rejection id: 2): TypeError: Converting circular structure to JSON为代码res.json({data:JSON.stringify(response)})
那么,这段代码中有没有遗漏什么?

8fsztsew

8fsztsew1#

axios.post('https://api.sandbox.xyz.com/v1/order/new', JSON.stringify({
            "request": "/v1/order/new",
            "nonce": 123462,
            "client_order_id": "20150102-4738721",
            "symbol": "btcusd",
            "amount": "1.01",
            "price": "11.13",
            "side": "buy",
            "type": "exchange limit"
        }), config)
        .then(function(response) {
            res.send(response.data)
        })
        .catch(function(error) {
            res.send({
                status: '500',
                message: error
            })
        });
j8ag8udp

j8ag8udp2#

这种情况在axios中经常发生,因为有时我们直接从端点返回响应。例如,如果我们直接传递响应,而不是传递response.data,就会发生此错误。

response = await axios.get("https://jsonplaceholder.typicode.com/users");
res.send(response); // error
res.send(response.data); // works perfectly
izkcnapc

izkcnapc3#

问题可能是因为你发送给客户端的响应不是JSON对象。在我的例子中,我通过简单地发送响应对象的JSON部分来解决这个错误。

res.status(200).json({
  success:true,
  result:result.data
})
ut6juiuv

ut6juiuv4#

这对我很有效。

res.status(200).json({
   data: JSON.parse(JSON.stringify(response.data)
}));
7lrncoxx

7lrncoxx5#

res.json({ data: JSON.stringify(response.data) });

这对我很有效。

holgip5t

holgip5t6#

尝试添加错误处理程序拦截器:

const handle_axios_error = function(err) {

    if (err.response) {
        const custom_error = new Error(err.response.statusText || 'Internal server error');
        custom_error.status = err.response.status || 500;
        custom_error.description = err.response.data ? err.response.data.message : null;
        throw custom_error;
    }
    throw new Error(err);

}

axios.interceptors.response.use(r => r, handle_axios_error);
axios.post(....)

感谢Sepehr Vakili的帖子https://github.com/axios/axios/issues/836#issuecomment-390342342

相关问题