使用Express,Node.JS和Require模块的外部API调用

我有一个路线如下:

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; 

我正在尝试对巨型炸弹API进行API调用,以便带回有关“魔兽世界”的任何数据。

问题是,路线刚刚加载; 它什么都不做,或者没有超时,只是连续加载。

我不知道我做错了什么,但是这是说…我不知道什么是正确的。 我一直在努力学习。

任何帮助将是伟大的。

谢谢

您需要从request()获取数据,并将其作为对原始Web服务器请求的响应发回。 它只是不断地加载,因为你从来没有发出任何回应的原始请求,因此浏览器只是坐在那里等待响应回来,最终,它会超时。

由于request()支持数据stream,所以可以非常简单地使用.pipe()来返回数据,如下所示:

 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' } }).pipe(res); }); module.exports = router; 

这将把request() result request()结果写入res对象,它将成为对原始http请求的响应。

相关的答案在这里: 如何代理请求作为回应

在Express中的每条路线上,都必须发送一个响应(部分或完整)或者next呼叫,或者同时执行。 你的路由处理程序既不。 尝试

 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); res.json(body); } else { res.json(error); } } }); }); module.exports = router; 

并查看此路由处理程序响应的数据。