一尘不染

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

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;

我正在尝试对Giant Bomb API进行API调用,以获取有关魔兽世界的所有数据。

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

我不知道我在做什么错,但是话虽这么说……我也不知道什么是对的。我在努力学习。

任何帮助都会很棒。

谢谢


阅读 385

收藏
2020-07-07

共1个答案

一尘不染

您需要获取从中获取的数据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;

这将.pipe()request()结果到res对象,它会成为原来的HTTP请求的响应。

2020-07-07