Двойной запрос на сервер с клиента
Отправляю запрос на сервер с клиента через библиотеку axios.
Запрос отправляется вроде как один раз, но в логах сервера, на сервер поступает 2 запроса, подумал может проблема в сервере, но при запросе на тот же эндпоинт, в логах сервера уже приходит 1 запрос.
Логи сервера при запросе с клиента:
info: webapi.Middlewares.LogMiddleware[0]
{ user = { username = air, id = 1, role = HighestAdmin }, request = { path = /api/core/users/1, method = GET } }
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (40ms) [Parameters=[@__userId_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30'] SELECT u.id, u.email, u.password_hash, u.role, u.username, t.file_id, t0.key_id, t0.person_internal_key, t0.private_key, t0.received_internal_key, t0.user_id, t.file_mime, t.file_name, t.operation_date, t.type, t.user_id
FROM users AS u
LEFT JOIN LATERAL (
SELECT f.file_id, f.file_mime, f.file_name, f.operation_date, f.type, f.user_id
FROM files AS f
WHERE EXISTS (
SELECT 1
FROM keys AS k
WHERE u.id = k.user_id AND k.user_id = f.user_id)
) AS t ON TRUE
LEFT JOIN LATERAL (
SELECT k0.key_id, k0.person_internal_key, k0.private_key, k0.received_internal_key, k0.user_id
FROM keys AS k0
WHERE u.id = k0.user_id
) AS t0 ON TRUE
WHERE u.id = @__userId_0
ORDER BY u.id, t.file_id
info: webapi.Middlewares.LogMiddleware[0]
Status Code: 200
info: webapi.Middlewares.LogMiddleware[0]
{ user = { username = air, id = 1, role = HighestAdmin }, request = { path = /api/core/users/1, method = GET } }
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (2ms) [Parameters=[@__userId_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
SELECT u.id, u.email, u.password_hash, u.role, u.username, t.file_id, t0.key_id, t0.person_internal_key, t0.private_key, t0.received_internal_key, t0.user_id, t.file_mime, t.file_name, t.operation_date, t.type, t.user_id
FROM users AS u
LEFT JOIN LATERAL (
SELECT f.file_id, f.file_mime, f.file_name, f.operation_date, f.type, f.user_id
FROM files AS f
WHERE EXISTS (
SELECT 1
FROM keys AS k
WHERE u.id = k.user_id AND k.user_id = f.user_id)
) AS t ON TRUE
LEFT JOIN LATERAL (
SELECT k0.key_id, k0.person_internal_key, k0.private_key, k0.received_internal_key, k0.user_id
FROM keys AS k0
WHERE u.id = k0.user_id
) AS t0 ON TRUE
WHERE u.id = @__userId_0
ORDER BY u.id, t.file_id
info: webapi.Middlewares.LogMiddleware[0]
Status Code: 200
А вот уже лог сервера при запросе с POSTMAN:
info: webapi.Middlewares.LogMiddleware[0]
{ user = { username = air, id = 1, role = HighestAdmin }, request = { path = /api/core/users/1, method = GET } }
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (39ms) [Parameters=[@__userId_0='?' (DbType = Int32)], CommandType='Text', CommandTimeout='30']
SELECT u.id, u.email, u.password_hash, u.role, u.username, t.file_id, t0.key_id, t0.person_internal_key, t0.private_key, t0.received_internal_key, t0.user_id, t.file_mime, t.file_name, t.operation_date, t.type, t.user_id
FROM users AS u
LEFT JOIN LATERAL (
SELECT f.file_id, f.file_mime, f.file_name, f.operation_date, f.type, f.user_id
FROM files AS f
WHERE EXISTS (
SELECT 1
FROM keys AS k
WHERE u.id = k.user_id AND k.user_id = f.user_id)
) AS t ON TRUE
LEFT JOIN LATERAL (
SELECT k0.key_id, k0.person_internal_key, k0.private_key, k0.received_internal_key, k0.user_id
FROM keys AS k0
WHERE u.id = k0.user_id
) AS t0 ON TRUE
WHERE u.id = @__userId_0
ORDER BY u.id, t.file_id
info: webapi.Middlewares.LogMiddleware[0]
Status Code: 200
Эндпоинт один, но почему запроса то два.
Вот код запроса на сервер с клиента:
import Interceptor from './AxiosRequestInterceptor';
const BASE_URL = 'https://localhost:7067/';
const AxiosRequest = async ({ endpoint, method, withCookie, requestBody }: RequestProps) => {
try {
var response;
switch (method) {
case 'POST':
response = await Interceptor.post(`${BASE_URL + endpoint}`, requestBody, { withCredentials: withCookie });
break;
case 'GET':
response = await Interceptor.get(`${BASE_URL + endpoint}`, { withCredentials: withCookie });
break;
case 'PUT':
response = await Interceptor.put(`${BASE_URL + endpoint}`, requestBody, { withCredentials: withCookie });
break;
case 'DELETE':
response = await Interceptor.delete(`${BASE_URL + endpoint}`, { withCredentials: withCookie });
break;
default:
throw new Error('Invalid request method');
}
return { isSuccess: true, data: response.data };
} catch (error: any) {
console.log(error);
let errorMessage = 'An error occurred during the request';
if (error.response) {
errorMessage = error.response.data && error.response.data.message ? error.response.data.message : 'Unknown error';
}
return { isSuccess: false, data: errorMessage };
}
}
export default AxiosRequest;
Код интерцептора:
import axios from 'axios';
import cookie from 'react-cookies'
const Interceptor = axios.create({ baseURL: 'https://localhost:7067' });
Interceptor.interceptors.request.use(request => requestInterceptor(request))
const requestInterceptor = (request: any) => {
request.headers['X-XSRF-TOKEN'] = cookie.load('.AspNetCore.Xsrf')
return request;
}
export default Interceptor;
Вот так сам вызывется функция для запроса на сервер:
const { userId } = useParams();
const [userData, setUserData] = useState(null);
const [successStatusCode, setStatusCode] = useState(false)
const [errorMessage, setErrorMessage] = useState('');
const fetchData = async () => {
const response = await AxiosRequest({ endpoint: `api/core/users/${userId}`, method: 'GET', withCookie: true, requestBody: null })
if (response.isSuccess) {
setUserData(response.data);
setStatusCode(true);
}
else {
setErrorMessage(response.data);
}
};
useEffect(() => {
fetchData();
}, [userId]);