我正在本地计算机(localhost)上运行一个dev项目,该项目正试图通过SSH隧道(React JS SPA)从服务器上的端点加载数据。
SSH隧道建立良好,当使用简单的GET在Postman中运行时,端点返回正确的数据包。
但是,当我尝试从我的应用程序访问数据时(尝试通过访存和Axios进行访问),会返回200,但不幸的是总是有一个空数组-而不是1k对象数组。
下面是两个简单的请求,其中“ localhost:8912”是公开的映射端口-在邮递员中可用。
获取:
fetch("http://localhost:8912/ENDPOINT/")
.then(res => console.log(res))
.catch(err => {
console.log(err);
return null;
});
Axios:
axios
.get("http://localhost:8912/ENDPOINT/")
.then(data => console.log(data.data))
.catch(err => {
console.log(err);
return null;
});
结果几乎立即在浏览器中返回,但由于服务器端的计算,在Postman中花费了几秒钟。
欢迎任何建议。
答案 0 :(得分:1)
尝试将 localhost
替换为 127.0.0.1
这可能与浏览器与Postman中的地址解析有关。
答案 1 :(得分:1)
如果没有代理,则可以将axios与另一个npm库— tunnel结合使用,以建立HTTPS-over-HTTP隧道:
import axios, { AxiosInstance } from 'axios';
import * as tunnel from 'tunnel';
const agent = tunnel.httpsOverHttp({
proxy: {
host: 'proxy.mycorp.com',
port: 8000,
},
});
const axiosClient: AxiosInstance = axios.create({
baseURL: 'https://some.api.com:443', // here I specify port 443
httpsAgent: agent,
});
参考:https://janmolak.com/node-js-axios-behind-corporate-proxies-8b17a6f31f9d
答案 2 :(得分:0)
fetch("http://localhost:8912/ENDPOINT/")
.then(res => return res.json())
.then(res => console.log(res))
.catch(err => {
console.log(err);
return null;
});
fetch返回一个Promise对象,其中包含各种信息,例如标头,HTTP状态等。
您有res.json()和其他各种可能性。 .json()将只返回带有json内容的主体。
有关更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch
您可以按以下方式返回数据: