React + Axios двойной POST-запрос для пружины RestController (также в fetch, кажется, не являются OPTIONS) - PullRequest
0 голосов
/ 03 декабря 2018

Я прочитал несколько постов о похожих проблемах, но у меня нет проблемы с CORS (я так не думаю), и моя сетевая вкладка не показывает отправку второго сообщения от клиента

Я использую Axios и реагирую на мой клиентский интерфейс, и после долгого времени отладки я обнаружил, что что-то вызывает мой метод RestController, всегда дважды, всегда около двух минут (это очень длинный ответ согромное количество данных)

В этой вкладке сети эта секунда не отображается POST, но при запуске из Почтальона все работает как положено (без случайных двойных вызовов)

Axios:

showCurrent = (dateA, dateB) => {

    axios.post("api/allData", {
        params: {
            date_a: dateA,
            date_b: dateB
        }})
        //successful fetch
        .then(res => this.setState({
            Data: res.data,
            isLoading: false,
            showPage: true,
            home: false,
        }))
        .catch(function (error) {
            //handle errors here
            alert(error.message);
        })
};

и requestMapping:

 @RequestMapping(value = "/allData", method = RequestMethod.POST)
 public @ResponseBody String allData(@RequestBody String req)  throws JsonProcessingException {

    CDate cDate = parseJSON(req);
    ObjectMapper objectMapper = new ObjectMapper();
    return objectMapper.writeValueAsString(DateRange.getDataForDateRange(date));
}

Класс контроллера также имеет @RestController аннотацию

Так что, если я запустил запрос менее чем за 2 минуты, все будет в порядке.но дольше этого, и контроллер будет вызываться дважды, и все идет наперекосяк.

Я могу добавить больше кода, если необходимо ... просто не знаю, как это исследовать.

РЕДАКТИРОВАТЬ:

Добавлен Console.log в методе, выполняющем публикацию в клиенте, и в серверной Java.

    console.log("whaaat");
    axios.post("api/allContracts", {
        params: {
            date_a: dateA,
            date_b: dateB
        }}).....

, который будет запускаться только один раз, тогда как публикация будет выполняться дважды, а конечная точка будеттриггер дважды ....

EDIT2:

Что ..... Я также добавил console.log() к каждому шагу от щелчка, чтобы выбрать.Ничто не сработает дважды, кроме POST ...

, даже с родными реакциями fetch то же самое произойдет

showCurrent = (dateA, dateB) => {
    console.log("whaaat");
    let obj = {};
    let params = {};
    params.date_a = dateA;
    params.date_b = dateB;
    obj.params = params;

    this.setState({isLoading: true});

    fetch("api/allData", {
        method: 'POST',
        body: JSON.stringify(obj),
        mode: 'cors',
    }).then( res => {
        return res.json()
    }).then( data => {
        this.setState({
            Data: data,
            isLoading: false,
            showPage: true,
            home: false,
        })
    }).catch(error => {
        //handle errors here
        alert(error.message);
    });

РЕДАКТИРОВАТЬ 3: Все еще никакого решения вообще .... Я прочитало предварительном запросе OPTIONS, но на вкладке сети такого нет.Я пытался обработать запрос OPTION в другом RequestMapping, но это срабатывает даже при запуске ....

Пытался установить тайм-аут около 2 миллионов секунд на сервере и клиенте, но этот запрос, похоже, тоже что-то делает .. Почтальон не имеет этой проблемы, все отлично работает

1 Ответ

0 голосов
/ 04 декабря 2018

На случай, если кто-нибудь удивится, полный отчаяния.Слушай, слушай, это было все о прокси в моем клиенте на стороне ...

После нескольких дней отладки (с очень вводящими в заблуждение сообщениями об ошибках) я обнаружил поток, рассказывающий о том, как nginx иногда повторяет попытку выборки, если естьis Proxy присутствует

proxy: {
        '/api': 'http://localhost:8080'
    }

После удаления этого я получил OPTIONS запрос, как и ожидалось.

следующий, получение пива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...