Node.js 从节点HTTP请求到外部API删除端口号

Node.js 从节点HTTP请求到外部API删除端口号,node.js,http,express,reactjs,webpack,Node.js,Http,Express,Reactjs,Webpack,我正在使用Node、Express和Webpack编写一个React应用程序。我的问题是,我的API调用的URL在主机和路径之间总是有一个端口号。似乎这个主题上的大多数问题更多地与路由有关,而不是与外部API调用有关 我对请求比较满意,但我在尝试让它与Webpack很好地配合时感到非常沮丧,所以我转向了我所知较少的Node的http 以下是负责API调用的方法: getData() { const self = this; const url = "api.civicapps.

我正在使用Node、Express和Webpack编写一个React应用程序。我的问题是,我的API调用的URL在主机和路径之间总是有一个端口号。似乎这个主题上的大多数问题更多地与路由有关,而不是与外部API调用有关

我对请求比较满意,但我在尝试让它与Webpack很好地配合时感到非常沮丧,所以我转向了我所知较少的Node的http

以下是负责API调用的方法:

getData() {
    const self = this;

    const url = "api.civicapps.org";

    const options = {
        "method": "GET",
        "mode": "no-cors",
        "host": url,
        "path": "/restaurant-inspections/?restaurant_name=" + this.state.nameQuery,
        "port": 8080,
        "headers": {
            "Access-Control-Allow-Origin": "http://localhost:3000"
        }
    }

    const p1 = new Promise(function(resolve, reject) {
        resolve(
            http.request(options, function(res) {
                res.setEncoding('utf8');
                const body = {};

                //This is clearly not ideal, but all I need right now is to get a response from the API

                res.on('data', function(chunk) {
                    body.push(chunk);
                });
                return body;
            }).end()
        )   
    });

    p1.then(function(data) {
            console.log(data);

        self.setState({
            name: data.body
        });
    });

    p1.catch(function(err) {

        ...
    });
}
我只想做一个对这个API的简单测试GET请求。一旦成功了,我就没事了


提前感谢。

事实证明,将端口设置为80并使用sudo运行解决了问题。

事实证明,将端口设置为80并使用sudo运行解决了问题。

我知道这个话题很古老,但我认为在Docker环境中分享类似问题的经验很好

由于我在节点容器中将服务作为主机名调用,因此我不希望在服务名称之后设置端口(例如:
http://my-api-service/v1/users
被称为
http://my-api-service/v1/users:80

我没有伸手去弄清楚,所以我用了。它有自己的定义类型,可以这样使用:

import Axios, { AxiosRequestConfig } from 'axios';
...

const options: AxiosRequestConfig = {
  headers: { 'Authorization': 'Bearer ' + token, 'Accept': 'application/ld+json' }
};

Axios.get('http://my-api-service/v1/users', options)
  .then((response) => {
    console.log(response.data);
  })
  .catch((error) => {
    console.error("Error: " + error.message);
  })
  .then(() => {
    // always executed
    // ...
  });

这是我发现的在Docker环境中解决此类错误的唯一方法。

我知道这个主题已经过时了,但我认为在Docker环境中分享类似问题的经验是很好的

由于我在节点容器中将服务作为主机名调用,因此我不希望在服务名称之后设置端口(例如:
http://my-api-service/v1/users
被称为
http://my-api-service/v1/users:80

我没有伸手去弄清楚,所以我用了。它有自己的定义类型,可以这样使用:

import Axios, { AxiosRequestConfig } from 'axios';
...

const options: AxiosRequestConfig = {
  headers: { 'Authorization': 'Bearer ' + token, 'Accept': 'application/ld+json' }
};

Axios.get('http://my-api-service/v1/users', options)
  .then((response) => {
    console.log(response.data);
  })
  .catch((error) => {
    console.error("Error: " + error.message);
  })
  .then(() => {
    // always executed
    // ...
  });

这是我发现的在停靠环境中解决此类错误的唯一方法。

您指的是哪个端口?您在请求中包含了一个端口(
8080
),您指的是哪个端口?您在请求中包含了一个端口(
8080
)。