Я работаю над проектом весенней загрузки с микросервисной архитектурой.
У меня есть микросервис (отчет), шлюз и реестр. Микросервис работает на порту 8082, который зарегистрирован в реестре.
Шлюз работает на порте 8080. При отправке запроса API в микро-службу отчетов от почтальона я получаю ответ, как и ожидалось.
Мой запрос:
ПОЛУЧИТЬ: http://localhost:8080/report
Но пока я делаю запрос GET из моего приложения React, я получаю сообщение об ошибке.
{
"timestamp":"2019-05-02T10:54:48.591+0000",
"status":500,
"error":"Internal Server Error",
"message":"pre:OAuth2TokenRelayFilter"
}
Вот запрос почтальона как XHR, который работает нормально.
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://<url>/report/v1");
xhr.setRequestHeader("Authorization", "Bearer <jwt token>");
xhr.send(data);
Вот фрагмент о звонке, который идет от реакции.
{
HEADERS : {
General :{
Request URL: <url>/report/v1
Request Method: GET
Status Code: 500 Internal Server Error
Remote Address: <IP>:443
Referrer Policy: no-referrer-when-downgrade
},
Response Headers : {
Access-Control-Allow-Headers: x-requested-with, Accept, Content-Type, Authorization
Access-Control-Allow-Methods: POST, GET, OPTIONS, DELETE,PUT
Access-Control-Allow-Origin: http://localhost:3000
Access-Control-Max-Age: 3600
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Connection: keep-alive
Content-Type: application/json;charset=UTF-8
Date: Tue, 21 May 2019 05:27:22 GMT
Expires: 0
Pragma: no-cache
Server: nginx/1.14.0 (Ubuntu)
Transfer-Encoding: chunked
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
}
Request Headers: {
Provisional headers are shown
Authorization: Bearer <jwt_token>
Origin: http://localhost:3000
Referer: http://localhost:3000/welcome
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.157 Safari/537.36
}
},
PREVIEW : {
{timestamp: "2019-05-21T05:27:22.186+0000", status: 500, error: "Internal Server Error",…}
error: "Internal Server Error"
message: "pre:OAuth2TokenRelayFilter"
status: 500
timestamp: "2019-05-21T05:27:22.186+0000"
},
RESPONSE {
{"timestamp":"2019-05-21T05:27:22.186+0000","status":500,"error":"Internal Server Error","message":"pre:OAuth2TokenRelayFilter"}
}
}
Вот как я звоню из своего приложения React:
export default class ReportService {
static call = {
getReport: 'getReport'
};
static callAxios(options) {
return axios(options)
.then(res => res.data)
.catch(err => Promise.reject(err));
}
static get(callTo, item) {
let url = null;
switch (callTo) {
case ReportService.call.getReport:
url = new URL("report/v1");
break;
}
url = ReportService.initParams(url, item);
return ReportService.callAxios({ method: 'get', url });
}
static initParams(url, item) {
if (item && item.params) {
let queryParams = Object.entries(item.params);
if (queryParams.length > 0) {
queryParams.forEach(([key, value]) => {
if (api.params[key]) {
url.searchParams.append(api.params[key], value);
}
});
}
}
return url;
}
}
Я не понимаю, что именно происходит. Любая помощь приветствуется.