16.1.2 • Published 6 months ago

@jsenv/server v16.1.2

Weekly downloads
248
License
MIT
Repository
github
Last release
6 months ago

server npm package

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

TopicDescription
Handling requestsProcess HTTP requests and generate responses
Handling errorsError handling strategies and custom responses
Server timingMeasure and report server performance metrics
CORSConfigure Cross-Origin Resource Sharing
HTTPSSet up secure HTTPS connections
Serving filesStatic file serving with caching and compression
Content negotiationContent type, language and encoding negotiation
WebsocketBi-directional real-time communication
Server Sent EventsPush updates to clients over HTTP
ClusterScale your server across multiple CPU cores
HTTP/2 PushOptimize loading with server push
15.5.0

9 months ago

15.5.2

8 months ago

15.5.1

9 months ago

15.5.3

8 months ago

15.3.2

12 months ago

15.3.3

11 months ago

16.1.1

6 months ago

16.1.2

6 months ago

15.4.1

9 months ago

15.4.0

9 months ago

16.0.8

6 months ago

16.0.7

7 months ago

16.0.2

7 months ago

16.0.1

7 months ago

16.0.0

7 months ago

16.0.6

7 months ago

16.0.5

7 months ago

16.0.4

7 months ago

16.0.3

7 months ago

15.2.19

1 year ago

15.2.17

1 year ago

15.2.18

1 year ago

15.2.15

1 year ago

15.2.16

1 year ago

15.2.13

1 year ago

15.2.14

1 year ago

15.2.11

1 year ago

15.2.12

1 year ago

15.2.10

1 year ago

15.3.0

1 year ago

15.3.1

1 year ago

15.2.4

1 year ago

15.2.5

1 year ago

15.2.3

1 year ago

15.2.8

1 year ago

15.2.9

1 year ago

15.2.6

1 year ago

15.2.7

1 year ago

15.2.1

2 years ago

15.2.2

2 years ago

15.2.0

2 years ago

15.1.1

2 years ago

15.1.2

2 years ago

15.1.0

2 years ago

15.1.5

2 years ago

15.1.6

2 years ago

15.1.3

2 years ago

15.1.4

2 years ago

15.1.7

2 years ago

15.1.8

2 years ago

15.0.3

2 years ago

15.0.4

2 years ago

15.0.2

3 years ago

15.0.0

3 years ago

15.0.1

3 years ago

14.1.16

3 years ago

14.1.10

3 years ago

14.1.14

3 years ago

14.1.13

3 years ago

14.1.12

3 years ago

14.1.11

3 years ago

14.1.15

3 years ago

14.1.8

3 years ago

14.1.9

3 years ago

14.1.7

3 years ago

14.1.3

3 years ago

14.1.4

3 years ago

14.1.5

3 years ago

14.1.6

3 years ago

14.1.0

3 years ago

14.1.1

3 years ago

14.1.2

3 years ago

12.8.0

3 years ago

13.0.0

3 years ago

12.7.0

3 years ago

12.7.1

3 years ago

12.7.2

3 years ago

12.7.3

3 years ago

12.7.4

3 years ago

12.7.5

3 years ago

13.1.0

3 years ago

14.0.0

3 years ago

12.6.1

3 years ago

12.6.2

3 years ago

12.6.3

3 years ago

12.6.0

4 years ago

12.5.9

4 years ago

12.5.3

4 years ago

12.5.4

4 years ago

12.5.5

4 years ago

12.5.6

4 years ago

12.5.7

4 years ago

12.5.8

4 years ago

12.4.0

4 years ago

12.4.1

4 years ago

12.4.2

4 years ago

12.3.0

4 years ago

12.3.1

4 years ago

12.3.2

4 years ago

12.3.3

4 years ago

12.5.2

4 years ago

12.5.0

4 years ago

10.0.5

4 years ago

10.0.6

4 years ago

10.0.7

4 years ago

10.0.8

4 years ago

10.0.9

4 years ago

10.0.1

4 years ago

10.0.2

4 years ago

10.0.3

4 years ago

10.0.4

4 years ago

12.0.0

4 years ago

10.0.11

4 years ago

10.2.0

4 years ago

10.2.1

4 years ago

12.2.1

4 years ago

12.2.0

4 years ago

11.0.0

4 years ago

10.1.4

4 years ago

10.1.5

4 years ago

10.1.6

4 years ago

10.1.0

4 years ago

10.1.1

4 years ago

10.1.2

4 years ago

10.1.3

4 years ago

12.1.0

4 years ago

10.0.0

4 years ago

9.0.1

4 years ago

9.0.0

4 years ago

9.2.4

4 years ago

9.2.3

4 years ago

9.2.2

4 years ago

9.2.1

4 years ago

9.1.1

4 years ago

9.1.0

4 years ago

9.2.0

4 years ago

7.3.1

4 years ago

7.3.0

4 years ago

8.0.0

4 years ago

7.2.0

4 years ago

7.1.0

4 years ago

6.2.0

4 years ago

7.0.0

4 years ago

6.1.1

4 years ago

6.1.0

4 years ago

6.0.3

4 years ago

6.0.2

4 years ago

6.0.1

5 years ago

6.0.0

5 years ago

5.6.0

5 years ago

5.5.0

5 years ago

5.4.2

5 years ago

5.4.1

5 years ago

5.4.0

5 years ago

5.3.0

5 years ago

5.2.3

5 years ago

5.2.2

5 years ago

5.2.1

5 years ago

5.2.0

5 years ago

5.1.0

5 years ago

5.0.0

5 years ago

4.2.3

5 years ago

4.2.2

5 years ago

4.2.1

5 years ago

4.2.0

5 years ago

4.1.2

5 years ago

4.1.1

5 years ago

4.1.0

5 years ago

4.0.9

5 years ago

4.0.8

5 years ago

4.0.7

5 years ago

4.0.6

5 years ago

4.0.5

5 years ago

4.0.4

5 years ago

4.0.3

5 years ago

4.0.2

5 years ago

4.0.1

5 years ago

4.0.0

5 years ago

3.0.0-alpha.8

5 years ago

3.0.0

5 years ago

3.0.0-alpha.7

5 years ago

3.0.0-alpha.6

5 years ago

3.0.0-alpha.5

5 years ago

3.0.0-alpha.4

5 years ago

3.0.0-alpha.3

5 years ago

3.0.0-alpha.2

5 years ago

3.0.0-alpha.1

5 years ago

3.0.0-alpha.0

5 years ago

2.11.0

5 years ago

2.10.1

5 years ago

2.10.0

5 years ago

2.9.0

5 years ago

2.7.2

5 years ago

2.8.0

5 years ago

2.9.1

5 years ago

2.7.0

5 years ago

2.7.1

5 years ago

2.6.0

5 years ago

2.5.2

5 years ago

2.5.1

5 years ago

2.5.0

5 years ago

2.4.0

5 years ago

2.3.1

5 years ago

2.3.0

6 years ago

2.2.0

6 years ago

2.1.2

6 years ago

2.1.1

6 years ago

2.1.0

6 years ago

2.0.2

6 years ago

2.0.1

6 years ago

2.0.0

6 years ago

1.6.1

6 years ago

1.6.0

6 years ago

1.6.0-alpha.1

6 years ago

1.6.0-alpha.0

6 years ago

1.5.9

6 years ago

1.5.8

6 years ago

1.5.7

6 years ago

1.5.6

6 years ago

1.5.5

6 years ago

1.5.3

6 years ago

1.5.2

6 years ago

1.5.1

6 years ago

1.5.0

6 years ago

1.4.1

6 years ago

1.4.0

6 years ago

1.3.1

6 years ago

1.3.0

6 years ago

1.2.0

6 years ago

1.1.0

6 years ago

1.0.0

6 years ago