nodeshine
TypeScript icon, indicating that this package has built-in type declarations

0.14.2 • Public • Published

Nodeshine

An HTTP & WebSocket server that is a little ray of sunshine.

Nodeshine Logo

NPM Link Test Coverage: 95% ISC License

Installation

npm install nodeshine

Or on Bun, you can use Bunshine directly.

Features

Nodeshine adds compatibility layer under Bunshine so that it can run on Node.

Features that come with Bunshine:

  1. Use bare Request and Response objects
  2. Support for routing WebSocket requests (Coming soon)
  3. Support for Server Sent Events
  4. Support ranged file downloads (e.g. for video streaming)
  5. Be very lightweight
  6. Treat every handler like middleware
  7. Support async handlers
  8. Provide common middleware out of the box
  9. Built-in gzip compression
  10. Comprehensive unit tests
  11. Support for X-HTTP-Method-Override header

Documentation

Bunshine documentation

Basic example

import { HttpRouter } from 'nodeshine';

const app = new HttpRouter();

app.get('/', c => {
  return new Response('Hello at ' + c.url.pathname);
});

app.listen({ port: 3100 });

Full example

import { HttpRouter, redirect } from 'nodeshine';

const app = new HttpRouter();

app.patch('/users/:id', async c => {
  await authorize(c.request.headers.get('Authorization'));
  const data = await c.request.json();
  const result = await updateUser(params.id, data);
  if (result === 'not found') {
    return c.json({ error: 'User not found' }, { status: 404 });
  } else if (result === 'error') {
    return c.json({ error: 'Error updating user' }, { status: 500 });
  } else {
    return c.json({ error: false });
  }
});

app.on404(c => {
  // called when no handlers match the requested path
  return c.text('Page Not found', { status: 404 });
});

app.on500(c => {
  // called when a handler throws an error
  console.error('500', c.error);
  return c.json({ error: 'Internal server error' }, { status: 500 });
});

app.listen({ port: 3100 });

function authorize(authHeader: string) {
  if (!authHeader) {
    throw redirect('/login');
  } else if (!jwtVerify(authHeader)) {
    throw redirect('/not-allowed');
  }
}

Full bunshine documentation

Roadmap

  • 🔲 Support for HTTPS
  • 🔲 Support for Bunshine's socket handling
  • 🔲 Support Bunshine's bin/serve.ts
  • ✅ Get requester ip

License

ISC License

Package Sidebar

Install

npm i nodeshine

Weekly Downloads

24

Version

0.14.2

License

ISC

Unpacked Size

466 kB

Total Files

43

Last publish

Collaborators

  • kensnyder