我设置了一个 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 ... 在 TCPConnectWrap.afterConnect [作为未完成] (net.js:1128:14) { 错误号:'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>
在浏览器控制台中您可以看到:
测试
2 200
测试
3 200
...来自 jsonplaceholder 的超长 json
所以这里工作得很好。 我究竟做错了什么?甚至可以像我尝试过的那样发送请求吗?
感谢您的帮助! :)
马克
最佳答案
你的代码工作得很好。看来您有一个代理阻止了该请求。您可以查看此线程以使用 xmlHttpRequest Use node-XMLHttpRequest through a Proxy? 添加代理.
我建议您使用更高级别的http请求库,例如superagent https://github.com/visionmedia/superagent
关于node.js - 使用 Node js 进行 REST 调用 : "Error: connect ETIMEDOUT" and "http code 0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59105690/