Dav*_*lia 18 javascript node.js
我有一条路线如下:
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;
Run Code Online (Sandbox Code Playgroud)
我正在尝试对Giant Bomb API进行API调用,以恢复有关魔兽世界的任何数据.
问题是,路线刚加载; 它没有做任何事情或它没有超时,它只是连续加载.
我不知道我做错了什么,但话虽如此......我也不知道什么是对的.我一直在努力学习.
任何帮助都会很棒.
谢谢
jfr*_*d00 32
您需要获取您获得的数据request()并将其作为对原始Web服务器请求的响应发回.它只是不断加载,因为你从未对原始请求发送任何类型的响应,因此浏览器只是坐在那里等待响应回来,最终,它会超时.
由于request()支持流,您可以非常简单地使用以下方式将数据作为响应发回.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;
Run Code Online (Sandbox Code Playgroud)
这将.pipe()在request()结果到res对象,它会成为原来的HTTP请求的响应.
相关答案:如何代理请求作为响应
对于 Laravel 用户来说,
如果没有的话首先安装npm i axios包。
var axios = require('axios');
var config = {
/* Your settings here like Accept / Headers etc. */
}
axios.get('http://local.dev/api/v1/users', config)
.then(function(response) {
console.log(response.data);
console.log(response.status);
console.log(response.statusText);
console.log(response.headers);
console.log(response.config);
});
Run Code Online (Sandbox Code Playgroud)
希望它能帮助别人!