通过SSH隧道访问端点

时间:2019-09-27 23:04:08

标签: javascript axios cross-domain fetch-api ssh-tunnel

我正在本地计算机(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中花费了几秒钟。

欢迎任何建议。

3 个答案:

答案 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

您可以按以下方式返回数据:

  • .arrayBuffer()
  • .blob()
  • .json()
  • .text()
  • .formData()