【问题标题】:Make a GET request to JSON API in Node.js?在 Node.js 中向 JSON API 发出 GET 请求?
【发布时间】:2014-09-30 17:41:11
【问题描述】:

想知道如何使用 Node.js 向 JSON API 发出 GET 请求。我最好使用 Express,但这不是必需的,并且输出在 Jade 页面上。 我对 Node.js 和整个后端语言仍然是全新的。

【问题讨论】:

    标签: node.js api get


    【解决方案1】:

    此外,为您带来request 包的人也推出了由bluebird 支持的基于promise 的版本,毫不奇怪,request-promise

    request-promise npm page

    有些人也更喜欢超级代理,它允许你链接命令:

    superagent npm page

    这是他们文档中的一个示例:

    request
      .post('http://localhost:3000/api/pet')
      .send({ name: 'Manny', species: 'cat' })
      .set('X-API-Key', 'foobar')
      .set('Accept', 'application/json')
      .end(function(err, res){
        // Calling the end function will send the request 
      });
    

    【讨论】:

      【解决方案2】:

      我喜欢用请求包:

      npm install --save request
      

      还有代码:

      var request = require('request');
      
      request({url: 'http://yourapi.com/', json: true}, function(err, res, json) {
        if (err) {
          throw err;
        }
        console.log(json);
      });
      

      【讨论】:

      • 在解析器 json true 中很好的捕获
      • 不应该是 var request = require('request');而不是像函数一样调用请求来初始化它?
      【解决方案3】:
      var request = require('request');
      request('<API Call>', function (error, response, body) {
          if (!error && response.statusCode == 200) {
            var info = JSON.parse(body)
          }
      })
      

      这将向 API 发出 HTTP 请求,并在成功后将响应解析为 JSON。

      至于将响应发送到 Jade 页面,您是否希望进行 API 调用(对您自己的服务器),然后使用 AngularJS/jQuery/其他框架来填写信息?

      如果您希望将其添加到您自己的路线中,请考虑像这样嵌入它:

      var express = require('express');
      var cors = require('cors');
      var request = require('request');
      var app = express();
      app.use(express.bodyParser());
      app.use(cors());
      app.get('<Your Route>', function(req, res){
        request('<API Call>', function (error, response, body) {
          if (!error && response.statusCode == 200) {
            var info = JSON.parse(body)
            // do more stuff
            res.send(info);
          }
        })
      });
      app.listen(3000);
      console.log("The server is now running on port 3000.");
      

      【讨论】:

      • 这段代码是放在“app.js”中还是放在“views”文件夹中的一个js文件中?我也打算使用另一个框架来填充页面上的信息 - 你知道怎么做吗?
      • @frumpygrumpy 我会考虑将它放在 app.js 中,但这取决于您如何构建程序。在我的大多数项目中,我将 Jade 文件保留在“views”文件夹中。这取决于您希望使用哪个框架,但您需要执行某种形式的 JSON/HTTP GET 来为您的前端接收此信息。
      • 我目前正在使用 Express,所以我的 Jade 文件位于“views”文件夹中。我想使用 API 来允许用户使用搜索选项,所以将此请求放在 app.js 或路由中的“index.js”中是否明智?
      • 你应该把它放在路由中。
      猜你喜欢
      • 2019-11-11
      • 2014-04-16
      • 1970-01-01
      • 2017-05-05
      • 2017-06-28
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 2022-12-03
      相关资源
      最近更新 更多