首页 > 解决方案 > 仅 6 次将 API POST 获取到 Node-js

问题描述

我试图在 Vanilla JS 中使用 Fetch API POST 方法。端点位于 Node-JS 代码中。只要 ONKEYDOWN 函数在 html 文本输入上运行,POST 方法函数就会运行。每当我们在键盘上键入时,它都会将数据发送到 Node-JS 端点,然后打印出来。每次我输入时,数据都在发送,但在停止打印req.body之前只收到了 6 次。

这是我的 HTML + Vanilla JS (index.html) 代码。


 <div onkeydown="post()">
            First Name
            <input type="text" name="FirstName" id="FirstName">
            <br> <br>
            Middle Name
            <input type="text" name="MiddleName" id="MiddleName">
            <br> <br>
            Last Name
            <input type="text" name="LastName" id="LastName">
        </div>

  <script>
            function post() {
                const formData = {
                    FirstName: document.getElementById('FirstName').value,
                    MiddleName: document.getElementById('MiddleName').value,
                    LastName: document.getElementById('LastName').value,
                }
                localStorage.setItem("FirstName", formData.FirstName)
                localStorage.setItem("MiddleName", formData.MiddleName)
                localStorage.setItem("LastName", formData.LastName)
                console.log(formData);

                fetch('/', {
                    method: 'post',
                    headers: {
                 

   'Content-Type': 'application/json'
                },
                body: JSON.stringify(formData)
            })
        }
    </script>

这是我的 Node-js 代码(index.js)




 const express = require('express')
 const app = express()
 app.use(express.json({ limit: '20mb'}))
 app.use(express.static('/')) //static folder
 
 
 app.listen(80, () => {
     console.log('THE PORT IS UP AND RUNNING')
 })
 
 app.get('/', (req, res) => {
     res.sendFile('index.html', { root: __dirname })
 })
 
 let i = 0; // to display the number of outputs
 app.post('/', (req, res) => {
     console.log(req.body, i++)
     // print the data
 })

根据此代码,我仅收到req.body 6 次,它打印在终端中(6 次)。请帮忙

标签: javascriptnode.js

解决方案


您需要发送对先前请求的响应。实现它的最简单方法是调用对象.end()的方法res

// print the data
res.end();

由于浏览器的并发请求数限制(包括 Google Chrome 在内的某些浏览器为 6),您的请求不会到达服务器。浏览器在发送下一个请求之前等待待处理的请求完成,但您的服务器从不发送响应。


推荐阅读