You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExpressJS爬虫API获取数据后始终返回500状态码求助

问题分析与解决

核心问题:变量名冲突

你在try块中使用const res = await axios.get(...),这里的res变量覆盖了Express路由回调函数的res参数(即Express的响应对象)。当后续执行res.status(200).json(data)时,此时的res已经是axios的响应对象,而非Express的响应对象,因此会触发异常,进入catch块返回500状态码。

修正后的代码

const router = require("express").Router();
const axios = require("axios");
const cheerio = require("cheerio");

router.get("/:id", async (req, res) => {
  const currency = req.params.id;
  try {
    // 将axios响应变量名改为axiosRes,避免覆盖Express的res
    const axiosRes = await axios.get(
      `https://coinmarketcap.com/currencies/${currency}/`
    );
    const html = axiosRes.data;
    var $ = cheerio.load(html);
    const price = $(".statsValue").first().text();
    const data = {
      market: Number(price.slice(1).replaceAll(",", "")),
    };
    console.log(data);
    res.status(200).json(data);
  } catch (error) {
    res.status(500).json(error);
  }
});

module.exports = router;

说明

只需要将axios请求返回的结果变量名从res替换为其他名称(比如axiosRes),就能避免变量覆盖问题,此时res.status(200).json(data)调用的是正确的Express响应对象方法,接口就能正常返回200状态码和数据了。

内容的提问来源于stack exchange,提问作者GusiiSenpaii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:39:40