Impossible d'envoyer des données d'axios au serveur de nœud renvoyant un objet vide
P粉141911244
P粉141911244 2024-03-31 11:14:22
0
1
2658

Mon code client :

<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <link rel="stylesheet" href="form.css" />
  </head>
  <body>
    <form action="/login" method="post" class="form">
      <input type="text" name="txt" class="txt" id="txt" placeholder="name" />
      <input type="submit" class="submit" id="submit" />
    </form>
    <script defer src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    <script>
      let submit = document.querySelector(".submit");
      const form = document.querySelector(".form");

      form.addEventListener("submit", (e) => {
        e.preventDefault();

        const formData = new FormData(form);

        const formObject = {};
        formData.forEach((value, key) => {
          formObject[key] = value;
        });

        console.log(axios.defaults)

        axios
          .post("http://localhost:8080/login", formObject)
          .then(function (response) {
            console.log(response.data);
          })
          .catch(function (error) {
            console.log(error);
          });
      });
    </script>
  </body>
</html>

Mon code côté serveur :

const app = express();
const path = require("path");

app.use(express.static('./public',{index:'form.html'}));

app.use(express.urlencoded({extended:true}));

    app.post('/login',(req,res)=>{
    //const txt = req.body;
      console.log('logged data: ',req.body);
      res.send('Thanks');
    })
app.listen(8080, () => {
  console.log('server is running...in port 8080')

 });

Tout d’abord, gardez à l’esprit que je suis nouveau dans le backend. Lorsque j'essaie de console.log les données enregistrées, il renvoie un objet vide, je ne comprends pas pourquoi mon req.body renvoie un objet vide, mais lorsque j'essaie de faire de même en donnant action:"/login" et le méthode Quand : "poster" à l'intérieur de la balise form, cela fonctionne comme prévu et me donne l'entrée que je fournis. S'il vous plaît, aidez-moi, j'ai la tête qui me brûle, merci d'avance.

P粉141911244
P粉141911244

répondre à tous(1)
P粉333186285

req.body 是空的,因为当您使用 axios 发送它时,您实际上发送的是 JSON (application/json) 负载,并且后端没有 JSON 负载解析器,只有 URL 编码,而HTML 表单以 application/x-www-form-urlencoded Envoyez-le au format, c'est pour ça que ça marche.

Vous devez donc utiliser axios pour envoyer des requêtes codées en URL, vous pouvez utiliser URLSearchParams pour convertir l'objet JSON en une chaîne de requête. Essaye ça.

axios
  .post("http://localhost:8080/login", new URLSearchParams(formObject))

Alternativement, ajoutez simplement un analyseur JSON dans le backend et vos requêtes JSON brutes fonctionneront, en utilisant l'analyseur intégré :

app.use(express.json());
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal