从Node HTTP请求中删除端口号到外部API

时间:2016-04-29 06:20:21

标签: node.js http express reactjs webpack

我正在使用Node,Express和Webpack编写React应用程序。我的问题是我的API调用'URL始终在主机和路径之间有一个端口号。看起来关于这个主题的大多数问题都与路由有关,而不是与外部API调用有关。

我对Request感觉更舒服,但是我非常沮丧地试图让它与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请求。一旦工作,我会没事的。

提前致谢。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我知道这个话题很旧,但是我认为在 Docker环境中分享有关类似问题的经验是很好的。

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

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

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
    // ...
  });

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