【问题标题】:Why is my POST request repeating every 2 minutes为什么我的 POST 请求每 2 分钟重复一次
【发布时间】:2018-06-16 06:24:19
【问题描述】:

我的客户端正在发送 1 个 POST 请求,但由于某种原因,我的服务器每 2 分钟重复处理一次。为什么要这样做?

当我运行我的代码并从客户端单击提交按钮时,客户端控制台输出 ONE time:

6/1/2018 @ 13:8:29 sendsettings request sent"

但是服务器控制台会输出:

6/01/2018 @ 13:08:29 sendsettings request received
6/01/2018 @ 13:08:29: ---INTRUDER ALERT---
6/01/2018 @ 13:10:29 sendsettings request received
6/01/2018 @ 13:10:29: ---INTRUDER ALERT---
6/01/2018 @ 13:12:29 sendsettings request received
6/01/2018 @ 13:12:29: ---INTRUDER ALERT---
6/01/2018 @ 13:14:29 sendsettings request received
6/01/2018 @ 13:14:29: ---INTRUDER ALERT---

等等……

这是我的客户端代码的简化版本:

<!DOCTYPE html>
<html>
    <body>
        <div id="inputs">
            Password: <input type="password" id="password" name="password"> 
            <input type="submit" id="submit" value="Submit">
        </div>
        <script>
            document.getElementById("submit").onclick = submitInfoToServer;

            var xhttpPost = new XMLHttpRequest();

            function submitInfoToServer() {

                xhttpPost.open("POST", "/sendSettings", true);

                var password = document.getElementById("password").value

                var sendString = JSON.stringify({
                        password: password
                    });

                var currentdate = new Date(); 
                var datetime = currentdate.getDate() + "/"
                            + ((currentdate.getMonth()+1))  + "/" 
                            + (currentdate.getFullYear()) + " @ "  
                            + (currentdate.getHours()) + ":"  
                            + (currentdate.getMinutes()) + ":" 
                            + (currentdate.getSeconds());

                console.log(datetime + ' sendsettings request sent')
                xhttpPost.setRequestHeader("Content-Type", "application/json")
                xhttpPost.send(sendString);
            }
        </script>
    </body>
</html> 

简化的服务器代码是:

var express = require('express')
var app = express()
var https = require('https')
var json = require('express-json')
var bodyParser = require('body-parser')

app.use( bodyParser.json() );       // to support JSON-encoded bodies
app.set('port', (process.env.PORT || 5000))

app.post('/sendSettings', function(request, response) {

    var currentdate = new Date(); 
    var datetime = currentdate.getDate() + "/"
                + pad((currentdate.getMonth()+1))  + "/" 
                + pad(currentdate.getFullYear()) + " @ "  
                + pad(currentdate.getHours()) + ":"  
                + pad(currentdate.getMinutes()) + ":" 
                + pad(currentdate.getSeconds());

    console.log(datetime + ' sendsettings request received')

    if(request.body.password == 'password')
        console.log(datetime + ': correct password')
    else
        console.log(datetime + ': ---INTRUDER ALERT---')

})

【问题讨论】:

  • 你似乎没有回复帖子...
  • 哦,没有意识到我需要这样做。将 response.send() 放在 POST 代码的末尾会解决它吗?
  • 会有帮助的;不确定是否还有其他问题,但每个快速端点都必须在某个时候发送响应,或者传递给链的其余部分。
  • 不确定这会导致什么样的行为,但你不应该使用type="submit",而应该使用type="button",或者在放置在表单之外时只使用&lt;button&gt;developer.mozilla.org/en-US/docs/Web/HTML/Element/input/submit

标签: javascript html node.js express post


【解决方案1】:

老问题,但如果有人提出这个问题:Node.js 中请求的默认超时时间是 2 分钟。您没有从服务器发回任何响应。

修复服务器脚本以发送回一些东西(例如:res.send('something')),这将停止发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2011-06-23
    • 2023-03-06
    • 2015-08-31
    • 2016-09-26
    • 1970-01-01
    • 2021-09-13
    相关资源
    最近更新 更多