🚀 DAY 5 OF LAUNCH WEEK:Introducing Webhook Events for Alert Changes.Learn more →
Socket
Book a DemoInstallSign in
Socket

do-listen

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

do-listen

Listen to a server and call a callback on error or success

latest
Source
npmnpm
Version
1.0.3
Version published
Maintainers
1
Created
Source

do-listen

Build Status Coverage Status

Properly call callback on a node server on the listening or error event.

Why?

I continue to see the following:

const http = require('http')
const server = http.createServer()
server.listen((err) => { // `err` won't be passed here
  if (err) throw err
})

The problem with that is that the cb passed to the listen function is only added as an event listener for the listening event.

i.e. no err will ever be passed back.

In order to properly wait for either the listening event or error event without leaking listeners:

function doListen(server, cb) {
  var called = false
  const done = (err) => {
    if (called) return
    server.removeListener('error', done)
    server.removeListener('listening', done)
    called = true
    cb(err)
  }

  server.on('error', done)
  server.on('listening', done)
}

which is literally what the package is :]

Install

$ npm install do-listen

Examples

'use strict'

const net = require('net')
const doListen = require('do-listen')

const server = net.createServer()
server.listen(0)
doListen(server, (err) => {
  if (err) throw err
  console.log('listening on', server.address().port)
})

This also works with http

'use strict'

const http = require('http')
const doListen = require('do-listen')

const server = http.createServer()
server.listen(8080)
doListen(server, (err) => {
  if (err) throw err
  console.log('listening on', server.address().port)
})

Want to use with promises or async/await?

'use strict'

const http = require('http')
const {promisify} = require('util')
const doListen = require('do-listen')

const server = http.createServer()
server.listen(8080)
async function main() {
  await doListen(server)
}

// or

'use strict'

const http = require('http')
const {promisify} = require('util')
const doListen = require('do-listen')

const server = http.createServer()
server.listen(8080)
doListen(server).then(() => {
  console.log('listening on', server.address().port)
}).catch((err) => {
  throw err
})

Test

$ npm test

Author

Evan Lucas

License

MIT (See LICENSE for more info)

FAQs

Package last updated on 30 Aug 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts