Giter VIP home page Giter VIP logo

abstract-http-server's Introduction

AbstractHttpServer

AbstractHttpServer is a thin wrapper class over node's http server

Installation

npm i --save abstract-http-server

Usage

Supports both ESM and CommonJS

// esm
import AbstractHttpServer from 'abstract-http-server'
// commonjs
const AbstractHttpServer = require('abstract-http-server').default

Hello World Example

Create and start "hello world" server using AbstractHttpServer

import AbstractHttpServer from 'abstract-http-server'

class MyHttpServer extends AbstractHttpServer {
  handleRequest(req, res) {
    res.statusCode = 200
    res.end('Hello World!')
  }
}

const server = new MyHttpServer()
await server.start({ port: 3333 })
// log: http server: starting { port: 3333 }
// log: http server: started { port: 3333 }

Async/Await Example

handleRequest can be used with async/await

import AbstractHttpServer from 'abstract-http-server'

class MyHttpServer extends AbstractHttpServer {
  async handleRequest(req, res) {
    await Promise.resolve()
    res.statusCode = 200
    res.end('Hello World!')
  }
}

Constructor Options Example

Constructor, start, and stop options examples

// AbstractHttpServer supports all of http.createServer options and custom logger
const server = new AbstractHttpServer({
  // http server options
  maxHeaderSize: 100;
  insecureHTTPParser: false;
  // additional options
  logger: console,
})

// start all of httpServer.listen options
await server.start({
  // http server listen options
  port: 3333,
  host: 'localhost',
  backlog: 10,
  path: 'foo',
  exclusive: false,
  readableAll: true,
  writableAll: true,
  ipv6Only: false,
})

// stop supports "destroying" a server using the force: true option
await server.stop({
  force: true
})

Stop Server Example

handleRequest can be used with async/await

import AbstractHttpServer from 'abstract-http-server'

class MyHttpServer extends AbstractHttpServer {
  async handleRequest(req, res) {
    await Promise.resolve()
    res.statusCode = 200
    res.end('Hello World!')
  }
}

const server = new MyHttpServer()
await server.start({ port: 3333 })
// log: http server: starting {}
// log: http server: started {}
await server.stop()
// log: http server: stopping {}
// log: http server: stopped {}

Errors Example

import AbstractHttpServer from 'abstract-http-server'

class MyHttpServer extends AbstractHttpServer {
  handleRequest(req, res) {
    res.statusCode = 200
    res.end('Hello World!')
  }
}

const server = new MyHttpServer()
try {
  await server.start({ port: 3333 })
} catch (err) {
  // log: http server: start errored: { err: ... }
  if (err instanceof HttpServerStartError) {
    console.error(err)
    /*
    HttpServerStartError: error starting http server
        at Function.wrap (/app/index.ts:51:12)
        ...
    {
      "port": 3333
    }
    ----
    Error: listen EADDRINUSE: address already in use :::3333
        at Server.setupListenHandle [as _listen2] (net.js:1313:16)
        ...
    */
    console.error(err.source)
    /*
    Error: listen EADDRINUSE: address already in use :::3333
        at Server.setupListenHandle [as _listen2] (net.js:1313:16)
        ...
    */
  }
  // ...
}
try {
  await server.stop()
} catch (err) {
  // log: http server: stop errored: { err: ... }
  if (err instanceof HttpServerStopError) {
    console.error(err)
    /*
    HttpServerStopError: error starting http server
        at Function.wrap (/app/index.ts:51:12)
        ...
    {}
    ----
    Error: foo
        at ...
        ...
    */
    console.error(err.source)
    /*
    Error: foo
        at ...
        ...
    */
  }
  // ...
}

License

MIT

abstract-http-server's People

Contributors

tjmehta avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.