将 unirest 'GET' 请求转换为 axios
Converting a unirest 'GET' request to axios
我正在使用 TheRundown API 来获取体育数据,他们给我的示例使用了 unirest,我正在尝试将该示例转换为 axios 请求。我大部分时间都在使用它,但我 运行 遇到的问题是在 axios 请求中包含 query
参数。
我已经尝试将 params
与 axios 请求一起使用,但它没有在 JSON 中提供我要求的额外数据。
这是我尝试转换为 axios 的示例代码:
var unirest = require("unirest");
var req = unirest("GET", "https://therundown-therundown-v1.p.rapidapi.com/sports/3/events");
req.query({
"include": [
"all_periods",
"scores"
]
});
req.headers({
"x-rapidapi-host": "therundown-therundown-v1.p.rapidapi.com",
"x-rapidapi-key": process.env.THERUNDOWN_API_KEY
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
这是我目前使用 axios 获得的代码:
response = await axios({
method: "GET",
url: `https://therundown-therundown-v1.p.rapidapi.com/sports/1/events`,
headers: {
"x-rapidapi-host": "therundown-therundown-v1.p.rapidapi.com",
"x-rapidapi-key": process.env.THERUNDOWN_API_KEY
},
params: {
include: ["all_periods", "scores"]
}
}).then(
function(response) {
sportsData[0].data = response.data;
}.bind(this)
);
所以我的 axios 请求中缺少的数据是我的 axios 请求中的 "score": [Object]
。你可以从我下面发布的 JSON 数据中看到。
这是我从 unirest 'GET'
请求中得到的 JSON:
{ meta: { delta_last_id: '11e9-bc68-68d68d53-8563-74040f62bb04' },
events:
[ { event_id: '402cb5659e1cbf08d6f6648fffcd6f91',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 927,
rotation_number_home: 928,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] },
{ event_id: '4cde94df721e1c18bba6389c0f80b34b',
sport_id: 3,
event_date: '2019-08-11T23:05:00Z',
rotation_number_away: 911,
rotation_number_home: 912,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] },
{ event_id: 'cbfba54a01f82b54dbc4e417cf2e371b',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 913,
rotation_number_home: 914,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] },
{ event_id: 'd2f689438cc61fdebadd464b40247f4a',
sport_id: 3,
event_date: '2019-08-11T19:40:00Z',
rotation_number_away: 909,
rotation_number_home: 910,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] } ] }
这是我从 axios 'GET'
请求中得到的 JSON:
{ meta: { delta_last_id: '11e9-bc68-68d68d53-8563-74040f62bb04' },
events:
[ { event_id: '402cb5659e1cbf08d6f6648fffcd6f91',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 927,
rotation_number_home: 928,
teams: [Array],
teams_normalized: [Array],
lines: [Object] },
{ event_id: '4cde94df721e1c18bba6389c0f80b34b',
sport_id: 3,
event_date: '2019-08-11T23:05:00Z',
rotation_number_away: 911,
rotation_number_home: 912,
teams: [Array],
teams_normalized: [Array],
lines: [Object] },
{ event_id: 'cbfba54a01f82b54dbc4e417cf2e371b',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 913,
rotation_number_home: 914,
teams: [Array],
teams_normalized: [Array],
lines: [Object] },
{ event_id: 'd2f689438cc61fdebadd464b40247f4a',
sport_id: 3,
event_date: '2019-08-11T19:40:00Z',
rotation_number_away: 909,
rotation_number_home: 910,
teams: [Array],
teams_normalized: [Array],
lines: [Object] } ] }
Axios 默认使用 arrayFormat: brackets
,api 需要重复。
当前的axios端点:
https://therundown-therundown-v1.p.rapidapi.com/sports/3/events?include[]=all_periods&include[]=scores
正确的端点:
https://therundown-therundown-v1.p.rapidapi.com/sports/3/events?include=all_periods&include=scores
您可以通过使用查询字符串包 arrayFormat repeat 提供 paramsSerializer
来更改此行为。
var qs = require('qs');
response = await axios({
method: "GET",
url: `https://therundown-therundown-v1.p.rapidapi.com/sports/1/events`,
headers: {
"x-rapidapi-host": "therundown-therundown-v1.p.rapidapi.com",
"x-rapidapi-key": process.env.THERUNDOWN_API_KEY
},
params: {
include: ["all_periods", "scores"]
},
paramsSerializer: function(params) {
return qs.stringify(params, {arrayFormat: 'repeat'})
},
}).then(
function(response) {
sportsData[0].data = response.data;
}.bind(this)
);
我正在使用 TheRundown API 来获取体育数据,他们给我的示例使用了 unirest,我正在尝试将该示例转换为 axios 请求。我大部分时间都在使用它,但我 运行 遇到的问题是在 axios 请求中包含 query
参数。
我已经尝试将 params
与 axios 请求一起使用,但它没有在 JSON 中提供我要求的额外数据。
这是我尝试转换为 axios 的示例代码:
var unirest = require("unirest");
var req = unirest("GET", "https://therundown-therundown-v1.p.rapidapi.com/sports/3/events");
req.query({
"include": [
"all_periods",
"scores"
]
});
req.headers({
"x-rapidapi-host": "therundown-therundown-v1.p.rapidapi.com",
"x-rapidapi-key": process.env.THERUNDOWN_API_KEY
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
这是我目前使用 axios 获得的代码:
response = await axios({
method: "GET",
url: `https://therundown-therundown-v1.p.rapidapi.com/sports/1/events`,
headers: {
"x-rapidapi-host": "therundown-therundown-v1.p.rapidapi.com",
"x-rapidapi-key": process.env.THERUNDOWN_API_KEY
},
params: {
include: ["all_periods", "scores"]
}
}).then(
function(response) {
sportsData[0].data = response.data;
}.bind(this)
);
所以我的 axios 请求中缺少的数据是我的 axios 请求中的 "score": [Object]
。你可以从我下面发布的 JSON 数据中看到。
这是我从 unirest 'GET'
请求中得到的 JSON:
{ meta: { delta_last_id: '11e9-bc68-68d68d53-8563-74040f62bb04' },
events:
[ { event_id: '402cb5659e1cbf08d6f6648fffcd6f91',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 927,
rotation_number_home: 928,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] },
{ event_id: '4cde94df721e1c18bba6389c0f80b34b',
sport_id: 3,
event_date: '2019-08-11T23:05:00Z',
rotation_number_away: 911,
rotation_number_home: 912,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] },
{ event_id: 'cbfba54a01f82b54dbc4e417cf2e371b',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 913,
rotation_number_home: 914,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] },
{ event_id: 'd2f689438cc61fdebadd464b40247f4a',
sport_id: 3,
event_date: '2019-08-11T19:40:00Z',
rotation_number_away: 909,
rotation_number_home: 910,
score: [Object],
teams: [Array],
teams_normalized: [Array],
line_periods: [Object] } ] }
这是我从 axios 'GET'
请求中得到的 JSON:
{ meta: { delta_last_id: '11e9-bc68-68d68d53-8563-74040f62bb04' },
events:
[ { event_id: '402cb5659e1cbf08d6f6648fffcd6f91',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 927,
rotation_number_home: 928,
teams: [Array],
teams_normalized: [Array],
lines: [Object] },
{ event_id: '4cde94df721e1c18bba6389c0f80b34b',
sport_id: 3,
event_date: '2019-08-11T23:05:00Z',
rotation_number_away: 911,
rotation_number_home: 912,
teams: [Array],
teams_normalized: [Array],
lines: [Object] },
{ event_id: 'cbfba54a01f82b54dbc4e417cf2e371b',
sport_id: 3,
event_date: '2019-08-11T20:10:00Z',
rotation_number_away: 913,
rotation_number_home: 914,
teams: [Array],
teams_normalized: [Array],
lines: [Object] },
{ event_id: 'd2f689438cc61fdebadd464b40247f4a',
sport_id: 3,
event_date: '2019-08-11T19:40:00Z',
rotation_number_away: 909,
rotation_number_home: 910,
teams: [Array],
teams_normalized: [Array],
lines: [Object] } ] }
Axios 默认使用 arrayFormat: brackets
,api 需要重复。
当前的axios端点:
https://therundown-therundown-v1.p.rapidapi.com/sports/3/events?include[]=all_periods&include[]=scores
正确的端点:
https://therundown-therundown-v1.p.rapidapi.com/sports/3/events?include=all_periods&include=scores
您可以通过使用查询字符串包 arrayFormat repeat 提供 paramsSerializer
来更改此行为。
var qs = require('qs');
response = await axios({
method: "GET",
url: `https://therundown-therundown-v1.p.rapidapi.com/sports/1/events`,
headers: {
"x-rapidapi-host": "therundown-therundown-v1.p.rapidapi.com",
"x-rapidapi-key": process.env.THERUNDOWN_API_KEY
},
params: {
include: ["all_periods", "scores"]
},
paramsSerializer: function(params) {
return qs.stringify(params, {arrayFormat: 'repeat'})
},
}).then(
function(response) {
sportsData[0].data = response.data;
}.bind(this)
);