使用Axios时遇TypeError: res.send不是函数,如何返回API数据给React?
问题原因及解决方案
错误原因
核心问题是Axios回调函数的参数名和Express的响应对象res重名了。
你在/dailyscores端点的外层是Express的请求处理函数,参数是(req, res),这里的res是Express用来给客户端发送响应的对象。但在Axios的.then(res => { ... })回调里,你又用res作为参数,此时这个res是Axios请求返回的自身响应对象,直接覆盖了外层的Express res。回调里的res根本不是Express的响应对象,自然没有send方法,所以触发报错。
可行解决方案
方案1:重命名Axios回调的参数
把Axios回调里的参数改成其他名称,比如axiosRes,避免和外层的res冲突:
app.get('/dailyscores', (req, res) => { axios.get('你要请求的第三方API地址') .then(axiosRes => { // 用axiosRes获取第三方API返回的数据 res.send(axiosRes.data); }) .catch(err => { res.status(500).send('获取数据失败'); }); });
方案2:改用async/await语法
彻底避免回调嵌套和参数冲突问题,代码逻辑更清晰:
app.get('/dailyscores', async (req, res) => { try { const axiosRes = await axios.get('你要请求的第三方API地址'); res.send(axiosRes.data); } catch (error) { res.status(500).send('请求第三方API出错'); } });
内容的提问来源于stack exchange,提问作者Safi
相关产品推荐
相关产品推荐

