NodeJS express 如何发起 GET 请求

14

有没有可能将Express用作客户端模块,向另一台服务器发出HTTP请求?

目前我是这样发起请求的:

var req = http.get({host, path}, function(res) {
    res.on('data', function(chunk) {
        ....
    }
}

这太笨重了。将其表达为服务器模块非常方便易用。我猜应该有一种简单的方法可以通过使用 Express 进行 GET 请求。我不喜欢 Express API,并且在那里没找到任何东西。


2
Express是一个HTTP服务器框架,而不是客户端。 - jgillich
2个回答

38
如果你想要简单的请求,不要使用 express 模块,而是使用例如 request
var 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.
  }
})

谢谢。我同意不使用 Express。 - marcel
7
好的,当你要回答请求时,可以使用 express,而当你想发出请求时,请使用 request - Denys Séguret
4
这个回答建议在NodeJS中向另一个服务器发出HTTP请求时,不要使用ExpressJS。这是否意味着ExpressJS没有能力进行出站HTTP请求?还是这个回答建议为简单起见使用第三方库? - Michael R
1
@MichaelR express是一个框架,使处理传入请求更加容易。正如已经提到的,它是一个服务器框架。 - Denys Séguret
3
请求已过时。 - Rifton007
显示剩余2条评论

7
使用 request 的答案有点过时了,因为它自2019年以来已经被弃用
使用 Node 内置的 https.request() 方法(Node 文档) 感觉有点“笨重”(我个人认为),但你可以很容易地根据你的需要简化它。如果你的使用情况就像你所描述的那样,那么你所需要的只是:
function httpGet(host, path, chunkFunction) {
    http.get({ host, path }, (res) => res.on('data', chunkFunction));
}

那么就可以在所有地方实施它,例如:

const handleChunk = (chunk) => { /* ... */ };
const req = httpGet(host, path, handleChunk);

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