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

如何在不使用require/request包的情况下从外部站点获取JSON数据

修复说明

现有代码核心问题

  • request 包已停止官方维护,且存在异步逻辑错误:request 是回调风格的异步方法,直接赋值得到的 facts 是请求实例对象,不是接口返回的目标数据,你在回调外直接返回自然只能拿到请求相关的元信息。
  • 请求方法不匹配:目标接口仅支持GET请求,你配置了POST方法导致返回结果异常。
  • 请求参数重复冲突:同时传入uri和hostname/port/path多套参数,导致请求逻辑混乱。

修复方案

直接使用Node.js内置的https模块发起请求,无需安装任何第三方依赖,不会出现模块找不到的报错,修复后代码如下:

const express = require('express');
const app = express.Router();
// 用Node内置https模块,无需额外安装
const https = require('https');

app.use('', (req, res) => {
  const src = 'https://catfact.ninja/fact';
  https.get(src, (requestRes) => {
    let data = '';
    // 接收数据分片
    requestRes.on('data', (chunk) => {
      data += chunk;
    });
    // 数据接收完成后处理返回
    requestRes.on('end', () => {
      try {
        const factData = JSON.parse(data);
        // 直接返回目标JSON数据
        return res.jsonp(factData);
      } catch (parseErr) {
        console.log(parseErr);
        return res.status(500).jsonp({ error: '数据解析失败' });
      }
    });
  }).on('error', (err) => {
    console.log(err);
    return res.status(500).jsonp({ error: '请求失败' });
  });
})

module.exports = app;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:36:03