使用节点 js 的 REST 调用:"Error: connect ETIMEDOUT" 和 "http code 0"



我设置了一个REST服务器,我可以通过Postman发送http请求。 这工作正常。 现在我正在尝试将GET请求从此服务器发送到另一台服务器。

让我向您展示:

const express = require('express');
const XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
const router = express.Router();
router.get('/', (req, res, next) => {
const http = new XMLHttpRequest();
const url = 'https://jsonplaceholder.typicode.com/posts';
// Postman Mock
//const url = '...';
http.open("GET", url);
http.send();
http.onreadystatechange = function() {
console.log(this.readyState, this.status);
console.log(this.statusText);
if (this.readyState == 4 && this.status == 200){
console.log("It worked!");
console.log(http.responseText);
}
}
res.status(200).json({
message: 'Handling GET requests to /product'
});
});
module.exports = router;

我通过 Postman 向我的服务器发送一个 GET 请求,这应该会触发从我的服务器到 jsonplacholder 的另一个 GET 请求。 但我明白这个:

4 0

错误:连接 ETIMEDOUT ... at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1128:14( { errno: 'ETIMEDOUT', 代码:"ETIMEDOUT", 系统调用:"连接", 地址: '...', 港口:。。。 }

没有HTTP代码0 ...
除了我尝试过这个:

<!DOCTYPE html>
<html>
<body>
<h2>The XMLHttpRequest Object</h2>

<script>
const Http = new XMLHttpRequest();
const url='https://jsonplaceholder.typicode.com/posts';
Http.open("GET", url);
Http.send();
Http.onreadystatechange = (e) => {
console.log("TEST");
console.log(Http.readyState, Http.status);
console.log(Http.responseText)
}
</script>
</body>
</html>

在浏览器控制台中,您可以看到以下内容:
TEST
2 200
TEST
3 200
...来自 jsonplaceholder 的极长 JSON

所以它在这里工作得很好。 我做错了什么?甚至可以像我尝试的那样发送请求吗?

感谢您的帮助! :)

马克

你的代码工作得很好。似乎您有一个代理阻止了请求。您可以查看此线程,了解如何使用 xmlHttpRequest Using node-XMLHttpRequest 通过代理添加代理?。

我建议您使用更高级别的http请求库,例如超级代理 https://github.com/visionmedia/superagent

最新更新