1
pingba OP 没人,雷锋一把吗?我顶!
|
2
hyyou2010 2020-02-11 16:10:59 +08:00
首先,res.send(json) 是内层 http.get 的 res,或应该是外层 app.get 的 res ?
|
3
pingba OP |
5
hyyou2010 2020-02-11 16:24:40 +08:00
你把外层的 res 全部修改为 outerRes 试试看
app.get('/api/abc', function (req, outerRes) { console.log("API 請求"); http.get('http://v.juhe.cn/toutiao/index"', function (res) { //console.log("statusCode: ", res.statusCode); //console.log("headers: ", res.headers); var json = ''; res.on('data', function (d) { json += d; }); res.on('end', function () { //获取到的数据 json = JSON.parse(json); outerRes.send(json); }); }).on('error', function (e) { outerRes.send(e); }); }) |
6
hyyou2010 2020-02-11 16:27:07 +08:00 1
另外建议在两个 res.on 里面都加打印,看看真的获取到 toutiao 的数据没有
|
7
pingba OP @hyyou2010 代码是网上搜的,node 我太业余了,连个调试环境都没有,直接部署宝塔面板做的接口。这段代码估计就有问题。能帮忙跑一下吗?感谢 /
|
8
hyyou2010 2020-02-11 17:05:03 +08:00
首先,改 outerRes 那一步应该是没问题。
其次,你应该用浏览器先访问一下 juhe.cn 那个网址 访问结果返回: resultcode "101" reason "错误的请求 KEY" result null error_code 10001 说明你请求时需要一个 key,那么代码中还需要增加这个 key |
9
hyyou2010 2020-02-11 17:07:35 +08:00
toutiao/index -------- 就是说这个网址需要一个访问 key
|
10
pingba OP @hyyou2010 可能是宝塔不兼容把,不过我用另一段代码成功解决了问题。
const http =require('http'); http.get('http://v.juhe.cn/toutiao/index', (res) => { const { statusCode } = res; const contentType = res.headers['content-type']; let error; if (statusCode !== 200) { error = new Error('请求失败\n' + `状态码: ${statusCode}`); } else if (!/^application\/json/.test(contentType)) { error = new Error('无效的 content-type.\n' +//再次报错 `期望的是 application/json 但接收到的是 ${contentType}`); } if (error) { outerRes.send(error.message); res.resume(); return; } //请求成功 res.setEncoding('utf8'); let rawData = ''; res.on('data', (chunk) => { rawData += chunk; }); res.on('end', () => { try { outerRes.send(rawData); } catch (e) { outerRes.send(e.message); } }); }).on('error', (e) => { outerRes.send(e.message); }); 换成这个就可以中转数据了。 |
11
hyyou2010 2020-02-11 17:23:41 +08:00
嗯嗯,解决了就好
|