我有一条路线如下:
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调用,以恢复它所拥有的有关魔兽世界的任何数据。
问题是,这条路线只会装货;它什么都不做,也不会超时,它只是不断地加载。
我不知道我做错了什么,但话虽如此......我也不知道什么是对的。我在沿着学习。
任何帮助都是最好的。
谢谢
4条答案
按热度按时间fhg3lkii1#
你需要把从
request()
得到的数据作为对原始web服务器请求的响应发送回去。它只是不断地加载,因为你从来没有对原始请求发送过任何类型的响应,因此浏览器只是坐在那里等待响应回来,最终,它会超时。由于
request()
支持流,因此可以非常简单地使用.pipe()
将数据作为响应发送回来,如下所示。这将
.pipe()
request()
结果转换为res
对象,并将成为对原始http请求的响应。相关答案如下:如何将请求代理回作为响应
在2021中编辑。
request()
库现在已经被弃用,不再推荐用于新代码。有许多alternatives库可供选择。我最喜欢的是got()
库。使用它可以像这样完成上述任务。这也升级为使用pipeline()
函数,它是.pipe()
的更好版本,具有更完整的错误处理功能。vddsk6oq2#
对于Express中的每个路由,都需要发送响应(部分或完整)或调用
next
,或者两者都执行。您的路由处理程序两者都不执行。请尝试并查看该路由处理器以什么数据进行响应。
92dk7w1h3#
在2022年
In节点