使用Node.js和Express进行简单的API调用

58

我刚开始学习Node、API和Web应用。

我已经了解了Node.js和Express的基本工作原理,但现在我想开始调用其他服务的API并使用它们的数据。

您能否概述一下基本的HTTP请求以及如何在Node中获取/解析响应?我还对向我的请求添加特定头信息感兴趣(最初我正在使用http://www.getharvest.com API来处理我的时间表数据)。

P.S. 这似乎很简单,但是搜索了很多都没有找到可以回答我的问题。如果这是重复问题,请让我知道,我会删除它。

谢谢!


你正在使用哪个版本的Node.js? - Michelle Tilley
当前的Node版本是0.4.12。 - John
3个回答

64

使用Express不能获取信息,你应该使用Mikeal的request库来实现这个特定目的。

安装:npm install request

该库的API非常简单:

const request = require('request');
request('http://www.google.com', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body) // Print the google web page.
  }
})

编辑:你最好使用这个库而不是默认的http库,因为它有一个更好的API和一些更高级的功能(甚至支持cookies)。

更新:request已被弃用,但还有一些不错的替代品,比如 'got' 或 'superagent'(在npm上查找它们)。


请问一下,对于 HTTP 请求,是否有必要结束请求,例如使用 '.end()'? - Karthikeyan Velmurugan
我认为这只适用于原生的 HTTP 客户端。而 request 已经为你完成了这个工作,并提供了更友好的接口。 - alessioalex
7
注意:'request' 库已被弃用。 - danefondo
4
请记住,这个库已经被弃用了(自2020年2月起)。 - ulou
4
请求现已过时。https://www.npmjs.com/package/request - KIYZ

7

您可以使用HTTP客户端:

var http = require('http');
var client = http.createClient(3000, 'localhost');
var request = client.request('PUT', '/users/1');
request.write("stuff");
request.end();
request.on("response", function (response) {
  // handle the response
});

此外,您可以按照api文档中的描述设置标题:
client.request(method='GET', path, [request_headers])

40
如果其他人遇到这种情况,需要知道这种方法已经被弃用了。 - Justin Helgerson

5

需要安装两个软件包。

npm install ejs 
npm install request

server.js

var request = require('request');
app.get('/users', function(req, res) {
    request('https://jsonplaceholder.typicode.com/users', function(error, response, body) {
        res.json(body)
    });
});

index.ejs

$.ajax({
    type: "GET",
    url: 'http://127.0.0.1:3000/posts',
    dataType: "json",
    success: function(res) {
        var res_data = JSON.parse(res);
        console.log(res_data);
    }
});

输出

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接