浏览器客户端需要很长时间才能向服务器发出POST请求

时间:2017-10-30 06:38:38

标签: javascript html node.js forms

当我尝试将表单发布到我的Node.js服务器时,浏览器客户端(在我的情况下为Chrome)需要永久(约2分钟)发送响应并接收它应该呈现的HTML。当我使用Postman发出相同的帖子请求时,它会立即发生。

当我尝试通过浏览器发送数据时,然后通过Postman发送它(当浏览器仍在加载其POST请求时),我的浏览器也将呈现HTML。如果我也没有在Postman中发送请求并让它加载,浏览器将继续在favicon中加载微调器,直到它显示ERR_EMPTY_RESPOSNE消息。

HTML:

<html>
<head>
    <script src="javascripts/jquery-3.2.1.js"></script>
    <script src="javascripts/login.js"></script>
</head>
<body>
    <h1>Login</h1>
    <form id="login-form" method="post" action="/">
        <div>
            <label for="username">Username:</label>
            <input type="text" id="username" name="username" />
        </div>
        <div>
            <label for="password">Password:</label>
            <input type="text" id="password" name="password" />
        </div>
        <div>
            <input type="submit" name="submit" id="submit" value="Submit"/>
        </div>  
    </form>
</body>

Node.js的:

router.post('/', function(req, res, next) {
  console.log("post received");
  res.render('songs');
})

1 个答案:

答案 0 :(得分:0)

2分钟,是Node.js服务器的特定超时,如果客户端向服务器发出请求,但在两分钟内不会从服务器获得任何响应,则为99% 服务器问题。我可以告诉你问题到底是什么,因为你在这里提供了很少的代码,但我可以让你知道为什么会出现这样的问题。

根据我的经验,有些人只是有这样的超时问题,他错误地将res对象设置为快速回调的外部范围,尽管他可以稍后调用res来发送数据到客户端。这是一个大错误。 reqres只能在中间件或路由器中调用,如果分配给范围外变量,其状态将会发生变化,因为任何请求都可以更改,并且会更改变量和当前变量请求不会得到任何响应,因为外部变量在发送任何数据之前已被修改。

另一种情况是,当你定义一个中间件时,你忘了打电话给next(),这只是一个非常简单的错误让你想哭。

如果这些情况都不是你的,也许你可以在这里添加更多代码,让我们看看它可能是什么样的真正问题。