首页 > 解决方案 > 使用 Axios 发布 JSON 的问题(“传递的值不是字符串或 JSON 对象”)

问题描述

编辑:已解决,在下面发布详细信息作为答案......非常愚蠢的用户错误

我正在尝试为 SteelSeries Gamesense 编写简单的插件,以在 GameDAC 屏幕中显示来自 iTunes 的当前播放歌曲。基本上,引擎通过提供的服务器工作,监听带有 JSON 正文的发布请求。我一直试图让我的请求工作很长一段时间,但没有成功。

我在 Postman 上测试了请求,它应该按预期工作,所以问题可能出在语法上。

const axios = require('axios');


const coreProps = require(process.env.ProgramData + '/SteelSeries/SteelSeries Engine 3/coreProps.json');
const url = JSON.stringify(coreProps['address']);

axios.defaults.baseURL = 'http://' + url.replace(/"/g,'');
axios.defaults.headers['post'] = {'Content-Type': 'application/json'};

console.log(axios.defaults.headers);

function bind_itunes() {

    const data = {
        "game": "ITUNES",
        "event": "NOWPLAYING",
        "handlers": [
            {
                "device-type": "screened",
                "zone": "one",
                "mode": "screen",
                "datas": [
                    {
                        "has-text": true,
                        "context-frame-key": "songname"
                    }
                ]
            }
        ]
    };

    axios.post('game_event', JSON.stringify(data))
        .then((res) => {
            console.log(res)
        }).catch((error) => {
        console.error(error)
    })
}

bind_itunes();

代码因来自 Axios 的长错误块而失败并出现错误

"data: { error: 'passed value not string or JSON object' } }"

完整的错误日志(pastebin,因为它很长):https ://pastebin.com/aLguKQ2C

邮递员截图

在此处输入图像描述

标签: javascriptnode.jsjsonaxios

解决方案


下次在提问之前,我还会确保对 API 端点进行三次检查。

正如在比较屏幕截图和代码时看到的那样,我轮询了错误的端点(game_event 而不是 bind_game_event),这很明显会导致请求错误。

经过数小时的思考后修复了该问题。

感谢所有尝试并抱歉打扰的人的帮助。


推荐阅读