使用节点js的REST调用:“错误:连接ETIMEDOUT”和“ http代码0”

时间:2019-11-29 13:25:39

标签: node.js http request postman

我设置了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 = 'https://5efea10b-0bab-4189-bcd6-7475ecac2875.mock.pstmn.io/example';
    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;

我通过邮递员向我的服务器发送了GET请求,这将触发另一个从我的服务器向jsonplacholder发出的GET请求。 但是我明白了:

4 0

错误:连接ETIMEDOUT 172.64.129.28:443 在TCPConnectWrap.afterConnect上[完成时](net.js:1128:14){ errno:“ ETIMEDOUT”, 代码:“ ETIMEDOUT”, syscall:“连接”, 地址:“ 172.64.129.28”, 端口:443 }

没有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>

在浏览器控制台中,您可以看到以下内容:
测试
2 200
测试
3200
...来自jsonplaceholder的超长json

所以在这里工作正常。 我究竟做错了什么?甚至可以像我尝试的那样发送请求吗?

感谢您的帮助! :)

马克

1 个答案:

答案 0 :(得分:0)

您的代码可以正常工作。似乎您有一个代理阻止了该请求。您可以查看使用xmlHttpRequest Use node-XMLHttpRequest through a Proxy?添加代理的线程。

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