JSPM

  • Created
  • Published
  • Downloads 408
  • Score
    100M100P100Q63237F
  • License GPL-3.0

A simple framework for creating web services

Package Exports

  • eonjs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (eonjs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Eon.js

A simple framework for creating web services

version badge license badge size badge dependency badge downloads badge issues badge closed issues badge pr badge stars badge website badge commit badge size badge repo size badge

Why Eon?

Yes, another web server framework. Whenever a new one comes out, you have to ask yourself: Do I need this? Am I fine to just continue using express/fastify/etc...? I want to present to you the reasons why I began writing this framework and hopefully make your decision a bit easier.

Express is not a small framework

Express is great, because it provides lots of features, but that also makes it a quite large library. With Eon, I tried to reduce the bundle size by writing as much code as possible on my own and adding only the necessary features.

0 Dependencies

As of v1.11.x, Eon.js has no dependencies whatsoever, thereby further reducing the bundle size and overhead of additional packages to manage.

Installation

To install eon, simply run

npm i eonjs@latest --save

Examples & Usage

Here is an example of using Eon:

// Require Eon
const eon = require('eonjs');
// Create App
// Shorthand: const app = require('eonjs')(8080);
const app = eon(8080);
// Create a get path
app.get('/').json((req, res) => ({hello: 'world', how_are: 'you?'}));

Typescript

This framework has Typescript typings bundled with it.

API

API referenece. Please Refer to the full documentation at eon.js.org

Plugins API

New In v1.15: Version 1.15 introduces the new Plugins API. I decided to take the time, rather sooner than later, to rewrite Eon into an "everything's-a-plugin" type of system. The full Plugin docs will be available soon at eon.js.org.

eon(port): EonWebEngine

This function is the default export of the Eon library. It will create a new EonWebEngine instance.

Class: EonWebEngine

An instance of this class is created by require('eon')(<port>);

constructor

Args:

  • port:number The port to listen on

get(path):Path

Registers a new GET listener on path.

Args:

  • path:string The pathname to register the listener on. Examples: "/", "/test"

Returns: GETPath extends Path

post(path):Path

Registers a new POST listener on path.

Args:

  • path:string The pathname to register the listener on. Examples: "/", "/test"

Returns: POSTPath extends Path

listen([callback]):void

Listens on the port specified by the constructor.

Args:

  • callback?:function(port) (optional) Will be called once the server is listening. Arguments: The port the server is listening on.

Returns: void

Class: Path

A path listener

text(callback):EonWebEngine

When a request is received on this path, the text returned from callback(req, res) will be sent to the client.

Args:

  • callback:function(req:IncomingHTTPData, res:OutgoingHTTPData) The request handler

Returns: EonWebEngine The Engine that created it.

json(callback):EonWebEngine

Like Path.text() but will run JSON.stringify on callback output before sending

hook(callback):EonWebEngine

Like Path.text(), but expects the callback to send data itself

Args:

  • callback:function(req:IncomingHTTPData, res:OutgoingHTTPData) The request handler

Returns: EonWebEngine The Engine that created it.

Class: IncomingHTTPData

An incoming HTTP request

field: whatwg:URL

A parsed URL object (see nodejs URL docs)

field: method:string

The request method ('GET', 'POST', 'PUT', etc..)

field: headers:object

The request headers (see nodejs http docs)

field: rawHeaders:object

The unprocessed request headers (see nodejs http docs)

field: url:string

The full request url, without protocol and host. Example: /p/a/t/h?name=john&lastname=doe#info

field: pathname:string

alias for IncomingHTTPData.whatwg.pathname

field: query:object

The parsed querystring (Only available for GET requests)

field: body:object

The parsed post/put body (Only available for Non-GET requests after the body event has fired)

event: body

Fired on POST-like requests after the body is received and parsed

Arguments to handler: none

on(event, handler)

Register an event handler. Multiple handlers can be registed for one event. Handlers cannot be unregistered

Args:

  • event:string Name of the event to listen for
  • handler:function(...args) The handler to call when the event is fired

Class: OutgoingHTTPData

An outgoing HTTP response. Passed as second argument to request handlers

field: endend:boolean

Wether the stream has been closed

status(code):OutgoingHTTPData

Sets the response status

Args:

  • code:number The status code to send

Returns: OutgoingHTTPData The object it was called on

header(name, value):OutgoingHTTPData

Sets a response header

Args:

  • name:string The name of the header
  • value:string The value of the header

Returns: OutgoingHTTPData The object it was called on

getHeader(name):string

Returns the value of a header

Args:

  • name:string The name of the header to retrieve

Returns string The value of the header

write(data):OutgoingHTTPData

Sends data to the client

Args:

  • data:string The data to write

Returns: OutgoingHTTPData The object it was called on

end(data):OutgoingHTTPData

Like write() but will close the stream

Returns: OutgoingHTTPData The object it was called on