编辑:已解决,在下面将详细信息作为答案...相当愚蠢的用户错误
我正在尝试为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' } }"
完整的错误日志(因为它很长,所以为astebin):https://pastebin.com/aLguKQ2C
邮递员屏幕截图
答案 0 :(得分:2)
我会建议与@Phil相同:使用axios.post
时不要对有效负载进行字符串化。 Axios文档中的示例可能会有用:https://github.com/axios/axios。我查看了您的屏幕截图,看来您已成功收到状态码为200的响应。您仍然遇到问题还是对请求的响应不同?
答案 1 :(得分:2)
下次,在提出问题之前,我还将确保对API端点进行三重检查。
从比较屏幕截图和代码时可以看出,我在错误的端点(game_event而不是bind_game_event)上进行轮询,这显然会导致请求不正确。
经过数小时的思考后解决了该问题。
感谢所有尝试过的人,对不起,麻烦您了。