Comment envoyer plusieurs requêtes avec axios ?
P粉316110779
P粉316110779 2024-03-26 21:18:41
0
1
391

Je fais un registre React avec quelques champs (idStudent (clé primaire et auto-incrémentation), prénom, nom, ..., professeur, prérequis) et j'utilise Formik & yes pour la validation.

Plus tard, j'ai dû associer ma candidature à un système de recommandation (recommander des projets de fin d'études aux étudiants) basé sur des prérequis et des notes obtenues dans certaines matières.

Au début, je n'utilisais qu'une seule table pour stocker les données du formulaire front-end,

Étudiant (prénom, nom, ..., prérequis)

Les étudiants peuvent sélectionner des prérequis dans la sélection de réponses qui contient des prérequis selon l'instructeur (Exemple : si l'étudiant étudie l'informatique, la sélection de réponses affichera uniquement les prérequis en informatique tels que Reaction, Angular, Machine Learning, ...). Étant donné qu'un étudiant peut avoir plusieurs prérequis, la colonne des prérequis dans la table des étudiants contiendra plusieurs identifiants pour le prérequis sélectionné, Les prérequis sont stockés dans une autre table de ma base de données (prerequisites(idFaculty, idPreconditions, prerequisites)) Je sais que je peux utiliser un fichier JSON pour stocker plusieurs identifiants dans une colonne, mais après avoir fait quelques recherches sur Stackoverflow dans certains articles précédents, j'ai trouvé que le traitement de JSON est difficile, surtout si je souhaite mettre à jour une colonne. J'ai donc créé un autre tableau pour stocker les prérequis sélectionnés par les étudiants lors de leur inscription

(studentPrecessions(idStd(clé étrangère faisant référence à idStudent de la table des étudiants), idPrecession(clé étrangère faisant référence à idPrecessions de la table des prérequis))

Le problème auquel je suis confronté est de savoir comment envoyer une demande de deux publications via axios, compte tenu J'ai pensé que je devrais peut-être utiliser une boucle pour stocker plusieurs lignes au cas où les étudiants sélectionneraient plusieurs prérequis.

Voici ce que j'ai fait :

Mes fichiers backend

app.post("/registerStudent", (req, res) => {
  const faculty = req.body.faculty;
  const firstName = req.body.firstName;
  const lastName = req.body.lastName;
  const phone = req.body.phone;
  const email = req.body.email;
  const password = req.body.password;
  db.query(
    "INSERT INTO students (email, password, firstName, lastName, faculty, phone) VALUES (?,?,?,?,?,?)",
    [email, password, firstName, lastName, filiere, phone],
    (err, result) => {
      if (err) {
        console.log(err);
      } else {
        // store chosen prerequisites
        //result.insertId is the current idStudent of the student who registering
        const idStd = result.insertId;
        const idPrerequisite = req.body.idprerequis;
        db.query(
          "INSERT INTO studentPrerequisites (idStd, idPrerequisite) VALUES (?,?)",
          [idFiliere, idPrerequisite],
          (err, result) => {
            if (err) {
              console.log(err);
            } else {
              res.send("Values Inserted");
            }
          }
        );
      }
    }
  );
});

Mon code front-end

const onSubmit = (values, actions) => {
    Axios.post("http://localhost:3001/registerStudent", {
      faculty: values.faculty,
      firstName: values.firstName,
      lastName: values.lastName,
      phone: values.phone,
      email: values.email,
      password: values.password,
    })
      .then(() => {
       //preId is an array  that contains the selected prerequisites(id's) from react select  
       //I try to use a for loop to store multiple of prerequisites dynamically in case a 
       //student select multiple prerequisites
        for (let i = 0; i < preId.length; i++) {
            idPrerequisites: preId[i],
        }
      })
      .then(() => {
        console.log("success!");
      });
    actions.resetForm();
  };

P粉316110779
P粉316110779

répondre à tous(1)
P粉976737101

Il est préférable de laisser le backend gérer plusieurs prérequis en transmettant un tableau de prérequis à votre demande. J'utiliserais également Knex et async/await pour éviter beaucoup de chaînages .then et profiter des transactions. Si une erreur se produit dans la transaction, la transaction reprendra toutes les requêtes. Knex facilite également l'interrogation de votre base de données avec des méthodes intégrées sans avoir à écrire du SQL brut. Vous devez également utiliser la déstructuration d'objets au lieu de faire firstName = req.body.firstName, lastName = req.body.lastName, etc. Vous pouvez en savoir plus sur knex et y connecter des bases de données ici : https://knexjs.org/guide/#node-js Et pourquoi ne hachez-vous pas vos mots de passe ? C’est au moins la sécurité la plus élémentaire que vous devriez mettre en place !

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal