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

Node.js中request模块调用BitcoinAverage API致服务器频繁崩溃排查

搞定你的比特币价格API请求问题!

看了你的代码和报错信息,我一下子就找到问题根源了——咱们一步步来解决:

首先,核心问题是Bitcoinaverage的v2 API现在不再允许匿名请求!你收到的报错Unauthenticated requests are not allowed就是明证,这时候API返回的不是你期望的JSON数据,而是一段提示文本,你硬去执行JSON.parse(body)肯定会抛出语法错误,直接导致服务崩溃。

接下来给你具体的解决方案:

第一步:获取API密钥

先去Bitcoinaverage平台注册账号(可以开通免费试用),拿到你的专属API密钥,这是调用他们API的必备凭证。

第二步:修改代码,带上认证并增加容错

你的代码还有几个小问题:比如引入了https模块但根本没用到,反而用了request模块却没在代码开头明确引入(虽然可能已经安装,但最好显式声明);另外完全没做错误处理,一旦请求出问题就直接崩服务。

给你改好的代码:

const express = require("express");
const bodyParser = require("body-parser");
const request = require("request"); // 明确引入request模块,确保已执行npm install request
const app = express();

app.use(bodyParser.urlencoded({ extended: true }));

app.get("/", function (req, res) {
  res.sendFile(__dirname + "/index.html");
});

app.post("/", function (req, res) {
  // 替换成你自己的Bitcoinaverage API密钥
  const YOUR_API_KEY = "这里填写你的API密钥";
  
  const requestOptions = {
    url: "https://apiv2.bitcoinaverage.com/indices/global/ticker/BTCUSD",
    headers: {
      "X-ba-key": YOUR_API_KEY // 带上认证请求头
    }
  };

  request(requestOptions, function (error, response, body) {
    // 先处理请求本身的错误(比如网络问题)
    if (error) {
      console.log("请求出错啦:", error);
      return res.status(500).send("获取比特币价格失败,请稍后重试");
    }

    // 检查API返回的状态码,非200则直接返回错误信息
    if (response.statusCode !== 200) {
      console.log("API返回错误内容:", body);
      return res.status(response.statusCode).send(body);
    }

    // 用try-catch包裹JSON解析,避免非JSON数据导致服务崩溃
    try {
      const data = JSON.parse(body);
      const currentPrice = data.last;
      const weeklyAvgPrice = data.averages.week;
      
      res.send(`<h1>当前比特币价格是 ${currentPrice} USD</h1>`);
      console.log("当前价格:", currentPrice);
      console.log("周平均价格:", weeklyAvgPrice);
    } catch (parseErr) {
      console.log("数据解析失败:", parseErr);
      return res.status(500).send("处理数据时发生错误");
    }
  });
});

// 启动服务器监听
app.listen(3000, () => {
  console.log("服务器已在localhost:3000启动!");
});

额外小建议

  • request模块已被官方标记为废弃,后续可以考虑换成axios或者node-fetch这类维护活跃的模块,它们用法更简洁,比如axios会自动帮你解析JSON,不用手动调用JSON.parse。
  • 以后写后端代码记得多添加错误捕获逻辑,不然单个请求失败就导致整个服务崩溃,用户体验会很差哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:22:48