2
votes

Obtenir des données de curl mais pareil avec axios donnant un objet vide

J'utilise react axios pour obtenir des données d'un serveur api backend flask. Quand je fais curl, j'obtiens des données parfaites comme réponse mais quand j'essaye avec axios, j'obtiens un objet vide avec 200

J'ai essayé de nombreuses façons possibles de faire axios (il manque peut-être la bonne) p>

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} "

code axios ci-dessous

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))
          };

Edit: Après avoir pris vos entrées, j'ai mis à jour le code (ci-dessous) toujours pas obtenir les données. Peut-il y avoir un problème avec l'API elle-même spécifique aux appels du navigateur?

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);
    }

edit2: En déboguant le backend, j'ai réalisé que les paramètres n'entrent pas dans l'API. Je ne sais pas pourquoi


2 commentaires

Avez-vous une erreur? Vérifiez votre console.


aucune erreur du tout


3 Réponses :


0
votes

Comme vous utilisez déjà async mais pas wait , essayez d'ajouter wait qui met en pause l'exécution jusqu'à ce que vous obtenir les données de la demande,

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);
    }


0 commentaires

0
votes

Il y a 2 choses que je veux ajouter ici:
1. Puisque vous n'attendez rien, vous n'avez pas besoin de marquer votre fonction comme asynchrone.
2. La méthode GET d'axios ne prend pas en charge les données et n'est pas destinée à envoyer le corps avec la requête. La bonne pratique sera de mettre à jour votre handle d'API pour accepter POST . Quoi qu'il en soit, s'il n'est pas possible de modifier l'API, vous pouvez envoyer vos données en les enveloppant dans l'objet params comme suggéré par axios lui-même.

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

Essayez quelque chose comme ça.
J'espère que ça aide !!


0 commentaires

-1
votes

J'ai pu résoudre le problème en utilisant POST car j'ai réalisé que même après avoir utilisé les paramètres, le serveur API Flask ne prend pas les paramètres de données. J'ai mis à jour l'API pour recevoir POST et cela a fonctionné comme un charme. Merci pour votre aide.


0 commentaires