当 运行 nodejs 中的 http 请求测试我的 rest api 它停止了,为什么?

When running http requests in nodejs to test my rest api it stops, why?

我休息 api 工作完美,现在我没有用邮递员手动测试它,而是编写了 http 请求来测试 CRUD 操作。我知道所有请求都在工作,因为它们给我状态代码 200。

我的问题是当 运行 测试命令行将显示它 运行 通过几乎所有的但它不会超出一些 GET 请求(即使我有相同的代码对于代码前面相同类型的请求。

当我注释掉卡住的 GET 请求时,它会毫无问题地运行该请求之后的请求。

这是我的 GET 请求代码:

var options = {
    host: 'localhost',
    port: 4000,
    path: '/api/services/00001/method/01/args/01'
};
http.get(options, function(res) {
   console.log("Got response: " + res.statusCode+"\nGET argument 01 for user 00001 method 01.\n\n ");
}).on('error', function(e) {
   console.log("Got error: " + e.message);
});

我是否遗漏了一些偶尔会让代码停止的东西 运行? 感谢任何帮助。

如果需要,我也可以为我的其他操作添加代码(POST、PUT、DELETE)。

在运行我的整个代码没有注释掉之后,我发现它也停止在我的第二次删除请求中,代码如下:

var options = {
   host: 'localhost',
   port: 4000,
   path: '/api/services/00001/method/01',
   method: 'DELETE'
};

http.get(options, function(res) {
  console.log("Got response: " + res.statusCode +"\nDELETE method 01 for user 00001.\n\n ");
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

解决方案可以是以下之一或两者:

  • 在您的请求 options 中设置 agent: false。这可以防止请求使用全局 http 代理套接字池,这意味着请求每次都会获得自己的新套接字。我见过奇怪的事情,因为节点的 http 代理实现导致请求永远不会启动。不过,您应该注意的一件事是您的 OS 用户(进程在 运行 之下)的文件描述符限制。如果您使用 agent: false 进行大量并发请求,您可能需要提高 OS 限制。

  • 在您的请求回调中使用 res.resume() 以在您不关心时从服务器中排出任何响应数据。这样做可以确保来自 http 代理套接字池的套接字可供另一个请求使用。