node.js - 在node.js中,如何在运行时检查我是否可以在端口80上运行?

标签 node.js

我正在编写一个 Node 服务器,它监听 2 个端口,端口 80 和 8080。如果我 sudo 它效果很好。我想做的是,如果它无法连接到端口 80,则让它仅在端口 8080 上运行,但我不知道如何检测这种情况。我希望当我调用 server.listen 时它会抛出,如

var ports = [80, 8080];
var servers = [];
var goodPorts = [];
for (var ii = 0; ii < ports.length; ++ii) {
  var port = ports[ii];
  var server = http.createServer(handleRequests);
  try {
    server.listen(port);
    servers.push(server);
    goodPorts.push(port);
  } catch (e) {
    // not sure how to check for this. Maybe this?
    if (e.toString().indexOf("EACCES") < 0) {
      throw e;
    } else {
      console.error("could NOT connect to port: " + port);
    }
  }
}
console.log("Listening on port(s): " + goodPorts.join(", ") + "\n");

但是 server.listen 不会抛出异常。设置后的某个时间会发生异常。 (换句话说,在底部的 console.log 之后。

如何检查它是否会在运行时工作?

最佳答案

server.listen接受回调,如果端口不可用,该回调将收到错误:

server.listen(80, function (err) {
  if (!err)
    return;

  server.listen(8080, function (err) {
    if (err)
      throw err;
  });
});

关于node.js - 在node.js中,如何在运行时检查我是否可以在端口80上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23402679/

相关文章:

Node.js - 从 wsdl 生成 Web 服务服务器/客户端框架

javascript - Redis 异步查询过早完成的可能解决方案

node.js - 如何使用 node-fetch、supertest 和 typescript 设置 fetch-mock

node.js - 在 Nodejs 应用程序中使用 gcloud 命令

javascript - 某些测试文件的 Node.js 代码覆盖率

node.js - npm 在 Windows 10 上非常慢

JavaScript 省略号 (...) 和冒号 (:)

node.js - PassportJS deserializeUser 从未调用过

angularjs - Angular $http POST 从 ExpressJS 获取空值

node.js - 用户之间的实时聊天,就像在社交网络中一样 [Laravel + Node + Redis]