Javascript 通过SSH隧道访问端点
我正在本地机器(localhost)上运行一个dev项目,它试图通过SSH隧道(React JS SPA)从服务器上的端点加载数据 SSH隧道建立得很好,端点使用简单的GET在Postman中运行时返回正确的数据包 但是,当我尝试从我的应用程序(fetch和Axios)访问数据时,返回的是一个200,但不幸的是,总是带有一个空数组,而不是1k对象数组 下面是两个简单的请求,其中“localhost:8912”是公开的和映射的端口,它在Postman中工作 获取:Javascript 通过SSH隧道访问端点,javascript,axios,cross-domain,fetch-api,ssh-tunnel,Javascript,Axios,Cross Domain,Fetch Api,Ssh Tunnel,我正在本地机器(localhost)上运行一个dev项目,它试图通过SSH隧道(React JS SPA)从服务器上的端点加载数据 SSH隧道建立得很好,端点使用简单的GET在Postman中运行时返回正确的数据包 但是,当我尝试从我的应用程序(fetch和Axios)访问数据时,返回的是一个200,但不幸的是,总是带有一个空数组,而不是1k对象数组 下面是两个简单的请求,其中“localhost:8912”是公开的和映射的端口,它在Postman中工作 获取: fetch("http://lo
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中需要几秒钟
欢迎任何建议。尝试用
127.0.0.1
替换
这可能与浏览器与邮递员的地址解析有关。如果您没有代理,您可以将axios与另一个npm库组合,以建立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,
});
参考:
fetch以Promise的形式返回一个对象,该对象包含各种信息,如头、HTTP状态等
您有res.json()和其他各种可能性。json()将返回包含json内容的正文作为承诺
有关更多信息:
您可以按以下方式返回数据:
- .arrayBuffer()
- .blob()
- .json()
- .text()
- .formData()
localhost
替换为127.0.0.1
时会发生什么?我不敢相信这真的起作用了-有时候很简单。谢谢@janniks
fetch("http://localhost:8912/ENDPOINT/")
.then(res => return res.json())
.then(res => console.log(res))
.catch(err => {
console.log(err);
return null;
});