nodeshine
v0.14.2
Published
A compatibility layer to run Bunshine on Node
Downloads
111
Maintainers
Readme
Nodeshine
An HTTP & WebSocket server that is a little ray of sunshine.
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:
- Use bare
Request
andResponse
objects - Support for routing
WebSocket
requests (Coming soon) - Support for Server Sent Events
- Support ranged file downloads (e.g. for video streaming)
- Be very lightweight
- Treat every handler like middleware
- Support async handlers
- Provide common middleware out of the box
- Built-in gzip compression
- Comprehensive unit tests
- Support for
X-HTTP-Method-Override
header
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');
}
}
Roadmap
- 🔲 Support for HTTPS
- 🔲 Support for Bunshine's socket handling
- 🔲 Support Bunshine's bin/serve.ts
- ✅ Get requester ip