【问题标题】:Browser client takes a long time to make a POST request to server浏览器客户端需要很长时间才能向服务器发出 POST 请求
【发布时间】:2017-10-30 06:38:37
【问题描述】:

当我尝试将表单发布到我的 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');
})

【问题讨论】:

  • 如果邮递员立即呈现而不是问题不在后端,您应该关注前端部分,您可以将 login.js 代码也放入您发送到后面的标题中它可以照亮我们的问题。

标签: javascript html node.js forms


【解决方案1】:

2 分钟,是 Node.js 服务器的特定超时,如果客户端向服务器发出请求,但在两分钟内没有得到服务器的任何响应,则为 99% 服务器问题。由于您在这里提供的代码很少,我可以告诉您真正的问题是什么,但我可以告诉您为什么会出现这样的问题。

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

还有一种情况,定义中间件的时候忘记调用next(),只是一个很简单的错误让你想哭。

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

【讨论】:

    猜你喜欢
    • 2023-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多