Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过SSH隧道访问端点_Javascript_Axios_Cross Domain_Fetch Api_Ssh Tunnel - Fatal编程技术网

Javascript 通过SSH隧道访问端点

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

我正在本地机器(localhost)上运行一个dev项目,它试图通过SSH隧道(React JS SPA)从服务器上的端点加载数据

SSH隧道建立得很好,端点使用简单的GET在Postman中运行时返回正确的数据包

但是,当我尝试从我的应用程序(fetch和Axios)访问数据时,返回的是一个200,但不幸的是,总是带有一个空数组,而不是1k对象数组

下面是两个简单的请求,其中“localhost:8912”是公开的和映射的端口,它在Postman中工作

获取:

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()

您的隧道必须通过隧道连接到api,而不是前端应用该隧道未连接到前端应用,它已连接到api,api被映射到该本地主机端口,并且在浏览器外部工作正常-即,我可以在Postman等中从本地计算机访问所有端点,并且api在浏览器中返回200,而没有任何数据包-就好像承诺在返回数据之前完成-这在浏览器。当您将
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;
  });