Express中如何将第一个接口返回值作为参数传入第二个接口
问题原因
- 你提前声明的
player_data对象中teamId初始为空字符串,拿到接口返回的teamId后,没有主动更新player_data.params.teamId的值,发起第二个请求时携带的仍然是空值,触发接口参数校验错误返回400。 - 代码存在作用域问题:第一个请求
then回调中重新用const声明了teamId,该变量仅在当前回调块内有效,无法同步到外部的请求配置对象。 - 额外注意:你给出的代码片段中第一个请求传入的
team_data配置对象没有定义,需要先确认该配置的正确性。 - 还有一处隐藏问题:axios返回的接口数据都挂载在
response.data下,你原代码注释部分直接取response.topPlayers.goals会取不到值。
解决方法
方法1:调整链式调用赋值逻辑
router.get('/', function(req, res, next) { // 替换成你实际的第一个接口请求配置 const team_data = { method: 'GET', url: '你第一个接口的请求地址', // 第一个接口需要的其他参数 } axios.request(team_data) .then(function (response) { const teamId = response.data.teams[0].id console.log(teamId) // 拿到teamId后再组装第二个请求的配置,直接传入有效值 const player_data = { method: 'GET', url: 'https://sofascore.p.rapidapi.com/teams/get-player-statistics', params: {teamId: teamId, tournamentId: '7', seasonId: '29267', type: 'overall'}, }; return axios.request(player_data) }) .then(function (response){ const players = response.data.topPlayers.goals res.render('index',{players: players}) }) .catch(function (error) { // 统一捕获错误避免服务异常 console.error('请求出错:', error) res.status(500).send('请求失败') }) })
方法2:用async/await改写(逻辑更清晰,更推荐)
// 给回调函数添加async关键字 router.get('/', async function(req, res, next) { try { // 替换成你实际的第一个接口请求配置 const team_data = { method: 'GET', url: '你第一个接口的请求地址', // 第一个接口需要的其他参数 } // 等待第一个请求返回结果 const teamRes = await axios.request(team_data) const teamId = teamRes.data.teams[0].id // 直接携带有效teamId发起第二个请求 const playerRes = await axios.request({ method: 'GET', url: 'https://sofascore.p.rapidapi.com/teams/get-player-statistics', params: {teamId: teamId, tournamentId: '7', seasonId: '29267', type: 'overall'}, }) const players = playerRes.data.topPlayers.goals res.render('index',{players: players}) } catch (error) { console.error('请求出错:', error) res.status(500).send('请求失败') } })
内容的提问来源于stack exchange,提问作者lilRed
相关产品推荐
相关产品推荐

