我设置了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
所以在这里工作正常。 我究竟做错了什么?甚至可以像我尝试的那样发送请求吗?
感谢您的帮助! :)
马克
答案 0 :(得分:0)
您的代码可以正常工作。似乎您有一个代理阻止了该请求。您可以查看使用xmlHttpRequest Use node-XMLHttpRequest through a Proxy?添加代理的线程。
我建议您使用更高级别的http请求库,例如超级代理https://github.com/visionmedia/superagent