我正在使用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请求。一旦工作,我会没事的。
提前致谢。
答案 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环境中解决此类错误的唯一方法。