如何在不使用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
相关产品推荐
相关产品推荐

