当我尝试将表单发布到我的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');
})
答案 0 :(得分:0)
2分钟,是Node.js服务器的特定超时,如果客户端向服务器发出请求,但在两分钟内不会从服务器获得任何响应,则为99% 服务器问题。我可以告诉你问题到底是什么,因为你在这里提供了很少的代码,但我可以让你知道为什么会出现这样的问题。
根据我的经验,有些人只是有这样的超时问题,他错误地将res
对象设置为快速回调的外部范围,尽管他可以稍后调用res
来发送数据到客户端。这是一个大错误。 req
和res
只能在中间件或路由器中调用,如果分配给范围外变量,其状态将会发生变化,因为任何请求都可以更改,并且会更改变量和当前变量请求不会得到任何响应,因为外部变量在发送任何数据之前已被修改。
另一种情况是,当你定义一个中间件时,你忘了打电话给next()
,这只是一个非常简单的错误让你想哭。
如果这些情况都不是你的,也许你可以在这里添加更多代码,让我们看看它可能是什么样的真正问题。