findPort.js 695 B

1234567891011121314151617181920212223242526272829303132333435
  1. 'use strict';
  2. const portfinder = require('portfinder');
  3. function runPortFinder(defaultPort, cb) {
  4. portfinder.basePort = defaultPort;
  5. portfinder.getPort((err, port) => {
  6. cb(err, port);
  7. });
  8. }
  9. function findPort(server, defaultPort, defaultPortRetry, fn) {
  10. let tryCount = 0;
  11. const portFinderRunCb = (err, port) => {
  12. tryCount += 1;
  13. fn(err, port);
  14. };
  15. server.listeningApp.on('error', (err) => {
  16. if (err && err.code !== 'EADDRINUSE') {
  17. throw err;
  18. }
  19. if (tryCount >= defaultPortRetry) {
  20. fn(err);
  21. return;
  22. }
  23. runPortFinder(defaultPort, portFinderRunCb);
  24. });
  25. runPortFinder(defaultPort, portFinderRunCb);
  26. }
  27. module.exports = findPort;