【发布时间】: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",或者在放置在表单之外时只使用<button>。 developer.mozilla.org/en-US/docs/Web/HTML/Element/input/submit
标签: javascript html node.js express post