@jsenv/server v16.1.2
server 
A modern, flexible Node.js HTTP server with declarative routing, content negotiation, and WebSocket support.
@jsenv/server
simplifies server development with a declarative API that handles common web server needs like routing, content negotiation, file serving, and real-time communication.
import { startServer } from "@jsenv/server";
await startServer({
port: 8080,
routes: [
{
endpoint: "GET *",
response: () => new Response("Hello world"),
},
],
});
Features
- * Declarative routing with path parameters and pattern matching
- * Content negotiation for type, language, version and encoding
- * Real-time communication via WebSockets and Server-Sent Events
- * File serving with ETags, conditional requests, and compression
- * Security with HTTPS and automatic HTTP-to-HTTPS redirection
- * HTTP/2 support including server push
- * CORS handling built-in
- * Performance monitoring with server timing
- * Sacalability through cluster mode for multi-core utilization
- Request authentification with JWT, OAuth etc
Installation
npm install @jsenv/server
Requirements:
- Node.js 22.13.1 or higher
- ES modules support
Quick Examples
Basic API Server
import { startServer } from "@jsenv/server";
await startServer({
port: 3000,
routes: [
{
endpoint: "GET /api/users",
response: () => Response.json([{ id: 1, name: "John" }]),
},
{
endpoint: "GET /api/users/:id",
response: (request) =>
Response.json({ id: request.params.id, name: "John" }),
},
{
endpoint: "GET *",
response: () => new Response("Not found", { status: 404 }),
},
],
});
Static File Server
import { startServer, createFileSystemFetch } from "@jsenv/server";
await startServer({
routes: [
{
endpoint: "GET *",
response: createFileSystemFetch(import.meta.resolve("./")),
},
],
});
HTTPS Server
import { readFileSync } from "node:fs";
import { startServer } from "@jsenv/server";
await startServer({
https: {
certificate: readFileSync(new URL("./server.crt", import.meta.url), "utf8"),
privateKey: readFileSync(new URL("./server.key", import.meta.url), "utf8"),
},
allowHttpRequestOnHttps: true, // will disable https redirection and let you handle http request
routes: [
{
endpoint: "GET *",
response: (request) => {
const clientUsesHttp = request.origin.startsWith("http:");
return new Response(
clientUsesHttp ? `Welcome http user` : `Welcome https user`,
);
},
},
],
});
Documentation
Topic | Description |
---|---|
Handling requests | Process HTTP requests and generate responses |
Handling errors | Error handling strategies and custom responses |
Server timing | Measure and report server performance metrics |
CORS | Configure Cross-Origin Resource Sharing |
HTTPS | Set up secure HTTPS connections |
Serving files | Static file serving with caching and compression |
Content negotiation | Content type, language and encoding negotiation |
Websocket | Bi-directional real-time communication |
Server Sent Events | Push updates to clients over HTTP |
Cluster | Scale your server across multiple CPU cores |
HTTP/2 Push | Optimize loading with server push |
9 months ago
8 months ago
9 months ago
8 months ago
12 months ago
11 months ago
6 months ago
6 months ago
9 months ago
9 months ago
6 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago