Wie sende ich mehrere Anfragen mit Axios?
P粉316110779
P粉316110779 2024-03-26 21:18:41
0
1
384

Ich erstelle eine Reaktionsregistrierung mit einigen Feldern (idStudent (Primärschlüssel und automatische Inkrementierung), Vorname, Nachname, ..., Lehrer, Voraussetzungen) und verwende Formik & Ja zur Validierung.

Später musste ich meine Bewerbung mit einem Empfehlungssystem verknüpfen (Studierenden Abschlussarbeiten empfehlen), basierend auf den Voraussetzungen und den in bestimmten Fächern erzielten Noten.

Am Anfang habe ich nur eine Tabelle zum Speichern der Daten aus dem Frontend-Formular verwendet,

Student (Vorname, Nachname, ..., Voraussetzungen)

Studierende können Voraussetzungen aus der Antwortauswahl auswählen, die laut Dozent Voraussetzungen enthält (z. B. wenn der Student Informatik studiert, werden in der Antwortauswahl nur Informatikvoraussetzungen wie React, Angular, Machine Learning usw. angezeigt). Da ein Student mehrere Voraussetzungen haben kann, enthält die Spalte „Voraussetzungen“ in der Studententabelle mehrere IDs für die ausgewählte Voraussetzung. Die Voraussetzungen sind in einer anderen Tabelle in meiner Datenbank gespeichert (Voraussetzungen(idFaculty, idPreconditions, Voraussetzungen)) Ich weiß, dass ich eine JSON-Datei verwenden kann, um mehrere IDs in einer Spalte zu speichern, aber nachdem ich in einigen früheren Beiträgen einige Recherchen zu Stackoverflow durchgeführt habe, habe ich festgestellt, dass die Verarbeitung von JSON schwierig ist, insbesondere wenn ich eine Spalte aktualisieren möchte. Deshalb habe ich eine weitere Tabelle erstellt, um die von den Studierenden bei der Anmeldung ausgewählten Voraussetzungen zu speichern

(studentPrecessions(idStd(Fremdschlüssel, der auf idStudent aus der Schülertabelle verweist), idPrecession(Fremdschlüssel, der auf idPrecessions aus der Voraussetzungentabelle verweist))

Das Problem, mit dem ich konfrontiert bin, besteht darin, wie ich über Axios eine Anfrage für zwei Beiträge senden kann Ich dachte, ich sollte vielleicht eine Schleife verwenden, um mehrere Zeilen zu speichern, falls die Schüler mehrere Voraussetzungen auswählen.

Das habe ich gemacht:

Meine Backend-Dateien

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

Mein Front-End-Code

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

Antworte allen(1)
P粉976737101

最好通过向您的请求传递先决条件数组来让后端处理多个先决条件。我还会使用 Knex 和 async/await 来避免大量 .then 链接并利用事务。如果事务中发生任何错误,事务将恢复所有查询。 Knex 还通过内置方法使查询数据库变得超级简单,而不用编写原始 SQL。您还应该使用对象解构,而不是执行firstName = req.body.firstName、lastName = req.body.lastName等。您可以在此处了解有关knex以及将数据库连接到它的更多信息:https://knexjs.org/guide/#node-js 另外,为什么你不对你的密码进行哈希处理?这是您至少应该做到的最基本的安全性!

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage