Получение данных из curl, но то же самое с axios, дающим пустой объект - PullRequest
1 голос
/ 04 июля 2019

Я использую реагирующее устройство для получения данных с сервера API бэкэнд-фляги.Когда я делаю скручивание, я получаю идеальные данные в качестве ответа, но когда я пытаюсь использовать axios, я получаю пустой объект с 200

. Я перепробовал много возможных способов, которыми мы делаем аксиосы ​​(возможно, отсутствует правильный)

curl curl -X GET "http://10.214.79.37:5050/v1/vision/api/assets/search" -H "accept: application/json" -H "Content-Type: application/json" -d "{ \"barraOnly\": true, \"label\": \"AAPL\", \"missingId\": false, \"searchFilter\": [], \"source\": null}"

код аксиоса ниже

const apiUrl = 'http://10.214.79.37:5050/v1/vision/api/assets/search';


const SearchTicker = () => {
    const [state, setState] = useState('');
    const handleInputChange = async (event) => {
        event.preventDefault();
        setState(event.target.value)
        axios.get(
            apiUrl, { data: "{ \"barraOnly\": true, \"label\": \"AAPL\", \"missingId\": false, \"searchFilter\": [], \"source\": null}"},           
            {headers: { "Content-Type": "application/json"}},
            ).then(function (response) {console.log(response)});
        // console.log(resp.data);
    }

Редактировать: После ввода ваших данных я обновил код (ниже), все еще не получая данные.Может ли быть проблема с самим API, специфичным для вызовов браузера?

const apiUrl = 'http://10.214.79.37:5050/v1/vision/api/assets/search';

    const SearchTicker = () => {
        const [state, setState] = useState('');
        const handleInputChange = event => {
            event.preventDefault();
            setState(event.target.value)

            const header = { 
              "Content-Type": "application/json",
            };

            const param = { 
              barraOnly: true, 
              label: "AAPL",
              missingId: false, 
              searchFilter: [], 
              source: null,
            };

            axios
              .get(apiUrl, { params:param , headers: header},)
              .then(response => console.log(response))
          };

edit2: Отладив бэкэнд, я понял, что параметры не попадают в API.Не уверен, почему

Ответы [ 3 ]

0 голосов
/ 04 июля 2019

Есть 2 вещи, которые я хочу добавить сюда:1. Поскольку вы ничего не ожидаете, вам не нужно отмечать вашу функцию как асинхронную.2. GET метод axios не поддерживает данные и не предназначен для отправки тела вместе с запросом.Хорошей практикой будет обновить ваш дескриптор API для принятия POST.В любом случае, если невозможно изменить API, вы можете отправить свои данные, обернув их в объект params, как предложено самим axios.

axios.get(url,{params: {your data}, {header:{}});

Попробуйте что-то вроде этого.Надеюсь, это поможет !!

0 голосов
/ 05 июля 2019

Мне удалось решить проблему с помощью POST, поскольку я понял, что даже после использования параметров сервер API Flask не принимает параметры данных. Я обновил API, чтобы получить POST, и он работал как шарм. Спасибо за вашу помощь.

0 голосов
/ 04 июля 2019

Поскольку вы уже используете async, но не await, попробуйте добавить await, выполнение которого pauses, пока вы не получите данные из запроса,

const apiUrl = 'http://10.214.79.37:5050/v1/vision/api/assets/search';


const SearchTicker = () => {
    const [state, setState] = useState('');
    const handleInputChange = async (event) => {
        event.preventDefault();
        setState(event.target.value)
        let response = await axios.get(apiUrl, { data: "{ \"barraOnly\": true, \"label\": \"AAPL\", \"missingId\": false, \"searchFilter\": [], \"source\": null}"},           
            {headers: { "Content-Type": "application/json"}});
        console.log(response);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...