3.0.0-alpha.5 • Published 6 years ago

@jsenv/server v3.0.0-alpha.5

Weekly downloads
248
License
MIT
Repository
github
Last release
6 years 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

12 months ago

15.5.2

11 months ago

15.5.1

12 months ago

15.5.3

11 months ago

15.3.2

1 year ago

15.3.3

1 year ago

16.1.1

9 months ago

16.1.2

9 months ago

15.4.1

12 months ago

15.4.0

12 months ago

16.0.8

9 months ago

16.0.7

9 months ago

16.0.2

10 months ago

16.0.1

10 months ago

16.0.0

10 months ago

16.0.6

10 months ago

16.0.5

10 months ago

16.0.4

10 months ago

16.0.3

10 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

2 years ago

15.2.12

2 years ago

15.2.10

2 years ago

15.3.0

1 year ago

15.3.1

1 year ago

15.2.4

2 years ago

15.2.5

2 years ago

15.2.3

2 years ago

15.2.8

2 years ago

15.2.9

2 years ago

15.2.6

2 years ago

15.2.7

2 years 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

3 years ago

15.0.4

3 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

4 years ago

13.0.0

3 years ago

12.7.0

4 years ago

12.7.1

4 years ago

12.7.2

4 years ago

12.7.3

4 years ago

12.7.4

4 years ago

12.7.5

4 years ago

13.1.0

3 years ago

14.0.0

3 years ago

12.6.1

4 years ago

12.6.2

4 years ago

12.6.3

4 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

5 years ago

6.0.3

5 years ago

6.0.2

5 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

6 years ago

3.0.0-alpha.6

6 years ago

3.0.0-alpha.5

6 years ago

3.0.0-alpha.4

6 years ago

3.0.0-alpha.3

6 years ago

3.0.0-alpha.2

6 years ago

3.0.0-alpha.1

6 years ago

3.0.0-alpha.0

6 years ago

2.11.0

6 years ago

2.10.1

6 years ago

2.10.0

6 years ago

2.9.0

6 years ago

2.7.2

6 years ago

2.8.0

6 years ago

2.9.1

6 years ago

2.7.0

6 years ago

2.7.1

6 years ago

2.6.0

6 years ago

2.5.2

6 years ago

2.5.1

6 years ago

2.5.0

6 years ago

2.4.0

6 years ago

2.3.1

6 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