我是在模仿CORS的要求来表达. 状态为OK,请求和响应成功.网络显示充满表单数据的有效负载.NodeJS终端中的Hovewer登录控制台undefined.

发送带有以下代码的表单字段:

<form id="formElt">
    <input type="text" name="FirstInput" id="" value="FirstInputValue"/>
    <input type="text" name="SecondInput" id="" value="SecondInputValue"/>
</form>
<button class="postBtn">POST</button>
<script>
postBtn.onclick = async () => {          
    let formElt = this.querySelector('#formElt');
    let fd = new FormData(formElt);
    fd.append('testInput', 'TestInputValue');
    await fetch('http://localhost:8080/add', {
        method: 'post',
        body: fd                
    })
    .then(res => {
         return res.text();                  
    })
    .then(data=>{
         p.innerText = data;
    })
}
</script>

在NodeJS端有:

const Router = require('express');
const cors = require('cors');
const router = Router();
router.use(cors())
const postOptions = {
    origin: 'http://127.0.0.1:5500',
}
router.post('/add', cors(postOptions), (req, res)=> {
    console.log(req.body);
    res.send('hello from node! Data received!');
})

enter image description here

推荐答案

你遗漏了expressform-data解码的代码.

// for form-data
const multer = require('multer');
const forms = multer();
router.use(forms.array());

完整代码 超文本标记语言

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device=width, intial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="is=edge" />
    <title>Form data</title>
  </head>

  <body>
    <form id="formElt">
      <input type="text" name="FirstInput" id="" value="FirstInputValue" />
      <input type="text" name="SecondInput" id="" value="SecondInputValue" />
    </form>
    <button id="postBtn">POST</button>
    <script>
      postBtn.onclick = async () => {
        let formElt = document.getElementById("formElt");
        let fd = new FormData(formElt);
        fd.append("testInput", "TestInputValue");
        await fetch("http://localhost:8080/add", {
          method: "post",
          body: fd,
        })
          .then((res) => {
            return res.text();
          })
          .then((data) => {
            p.innerText = data;
          });
      }
    </script>
  </body>
</html>

Server.js

const Router = require('express');
const cors = require('cors');
const router = Router();
router.use(cors())

// for form-data
const multer = require('multer');
const forms = multer();
router.use(forms.array()); 

// for x-www-form-urlencoded
router.use(Router.urlencoded({ extended: true }))

// for raw JSON
router.use(Router.json()); 

const postOptions = {
    origin: 'http://127.0.0.1:5500',
}

router.post('/add', cors(postOptions), (req, res)=> {
    console.log(JSON.stringify(req.body, null, 4));
    res.send('hello from node! Data received!');
})

router.listen(8080, () => { console.log("Listening on :8080") })

启动服务器

node Server.js

Launch index.html from VS code by Go-Live extension. enter image description here

received data at Server.js

enter image description here

如果仅使用JSON.stringify(req.body),则将显示以下输出

    console.log(JSON.stringify(req.body));

enter image description here

POST three different Body data types. It matched Server.js decoding and result at server and Postman POST call.

enter image description here

Node.js相关问答推荐

我的位置也移动时左右拖动谷歌 map

NodeJS缓冲区大小逻辑:为什么默认是8KB,而不仅仅是数据大小?

Sequelize-测试使用虚拟场更新模型

Node.js 连接在查询完成之前终止

使用单个 MongoDB 查询更新多个元素

如何修复node.js中的错误代码无法加载资源:服务器响应状态为403(禁止)

是否可以在 NodeJS 代码库中的每个函数之前和之后添加 console.log?

(Mongoose) 删除 TTL 字段失败

Node.js |如何在微服务之间转发标头?

无法更新MongoDB中的文档:";伯森场';writeConcern.w';是错误的类型';数组'&引用;

在 Javascript 逻辑中访问 EJS 变量

Node.js mongodb 驱动程序异步/等待查询

Node.js 变量声明和范围

使用 ES6 语法和动态路径导入模块

node 应用程序是否有任何独立的 gui 模块

Node.js 17.0.1 Gatsby 错误-数字信封 routine ::不支持 ... ERR_OSSL_EVP_UNSUPPORTED

在 Node.js 中使用公钥加密数据

Javascript在try块内设置const变量

如何创建安全(TLS/SSL)Websocket 服务器

AWS Lambda:如何将秘密存储到外部 API?