我的客户端代码:

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

我的服务器端代码:


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')

 });

首先,请记住,我是后端新手.当我try sole.log记录记录的数据时,它将返回一个空对象.我不明白为什么req.Body返回一个空对象,但当我try 通过在form标记内提供操作:"/LOGIN"和METHOD:"POST"来执行同样的操作时,它会按预期工作,并给出我提供的输入.请谁帮帮我,我的头都快烧焦了,提前谢谢你.

推荐答案

req.body是空的,因为当您使用axios发送它时,实际上发送的是JSON(application/json)有效负载,并且在后端没有JSON有效负载解析器,只有URL编码的,而HTML表单以application/x-www-form-urlencoded格式发送它,这就是它工作的原因.

因此,您需要使用AXIOS发送URL编码的请求,可以使用URLSearchParams将JSON对象转换为查询字符串.尝尝这个.

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

或者,只需向后端添加一个JSON解析器,您的原始JSON请求就会工作,使用内置解析器:

app.use(express.json());

Javascript相关问答推荐

JavaScript .Click()函数不起作用

强制执行useStatego struct 化变量[foo,setFoo]的命名约定?

仅在React和JS中生成深色

foreach循环中的Typescript字符串索引

如何修复内容安全策略指令脚本-SRC自身错误?

如何分配类型脚本中具有不同/额外参数的函数类型

单击更新页面的按钮后,页面刷新;测试/断言超时,有两个标题,但没有一个标题

了解Node.js中的EventEums和浏览器中的addEventEums之间的关系

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

如何在mongoose中链接两个模型?

将现场录音发送到后端

从Nextjs中的 Select 项收集值,但当单击以处理时,未发生任何情况

映射类型定义,其中值对应于键

让chart.js饼图中的一个切片变厚?

自定义图表工具提示以仅显示Y值

每次重新呈现时调用useState initialValue函数

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色

bootstrap S JS赢得了REACT中的函数/加载

在执行console.log(new X())时记录一个字符串