我有如下路线:
var express = require('express');
var router = express.Router();
var request = require('request');
router.get('/', function(req, res, next) {
request({
uri: 'http://www.giantbomb.com/api/search',
qs: {
api_key: '123456',
query: 'World of Warcraft: Legion'
},
function(error, response, body) {
if (!error && response.statusCode === 200) {
console.log(body)
}
}
});
});
module.exports = router;
我正在尝试对 Giant Bomb API 进行 API 调用,以取回它拥有的有关魔兽世界的任何数据。
问题是,路线刚刚加载;它什么都不做,也不会超时,它只是持续加载。
我不知道我做错了什么,但话虽这么说……我也不知道什么是对的。我正在努力学习。
任何帮助都会很棒。
谢谢
原文由 Dave Melia 发布,翻译遵循 CC BY-SA 4.0 许可协议
您需要获取从
request()
获得的数据,并将其作为对原始 Web 服务器请求的响应发回。它只是持续加载,因为您从未对原始请求发送任何类型的响应,因此浏览器只是坐在那里等待响应返回,最终,它会超时。由于
request()
支持流,您可以非常简单地使用.pipe()
像这样将数据作为响应发回。这将
.pipe()
request()
结果变成res
对象,它将成为对原始 http 请求的响应。此处的相关答案: How to proxy request back as response
2021 年 编辑
request()
库现已弃用,不再推荐用于新代码。有很多 选择 可供选择。我最喜欢的是got()
库。可以像这样使用它来完成上述操作。这也升级为使用pipeline()
函数,它是.pipe()
的更好版本,具有更完整的错误处理。