15.2.2 • Published 4 months ago

@jsenv/server v15.2.2

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

server npm package

@jsenv/server helps to write flexible server code with a declarative API.

import { startServer } from "@jsenv/server";

await startServer({
  port: 8080,
  services: [
    {
      handleRequest: () => {
        return {
          status: 200,
          headers: {
            "content-type": "text/plain",
          },
          body: "Hello world",
        };
      },
    },
  ],
});

Examples

Code starting a server with 2 request handlers:

/*
 * starts a server which:
 * - when requested at "/"
 *   -> respond with 200
 * - otherwise
 *   -> respond with 404
 */
import { startServer, composeServices } from "@jsenv/server";

const server = await startServer({
  services: [
    {
      name: "index",
      handleRequest: (request) => {
        if (request.resource === "/") {
          return { status: 200 };
        }
        return null;
      },
    },
    {
      name: "otherwise",
      handleRequest: () => {
        return { status: 404 };
      },
    },
  ],
});

const fetch = await import("node-fetch");
const responseForOrigin = await fetch(server.origin);
responseForOrigin.status; // 200

const responseForFoo = await fetch(`${server.origin}/foo`);
responseForFoo.status; // 404

Code starting a server in https:

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,
  services: [
    {
      handleRequest: (request) => {
        const clientUsesHttp = request.origin.startsWith("http:");

        return {
          status: 200,
          headers: {
            "content-type": "text/plain",
          },
          body: clientUsesHttp ? `Welcome http user` : `Welcome https user`,
        };
      },
    },
  ],
});

Code starting a server for static files:

import { startServer, fetchFileSystem } from "@jsenv/server";

await startServer({
  services: [
    {
      handleRequest: async (request) => {
        const fileUrl = new URL(request.resource.slice(1), import.meta.url);
        const response = await fetchFileSystem(fileUrl, request);
        return response;
      },
    },
  ],
});

Documentation

Installation

npm install @jsenv/server
15.2.1

4 months ago

15.2.2

4 months ago

15.2.0

4 months ago

15.1.1

8 months ago

15.1.2

8 months ago

15.1.0

10 months ago

15.1.5

7 months ago

15.1.6

6 months ago

15.1.3

8 months ago

15.1.4

7 months ago

15.1.7

6 months ago

15.1.8

6 months ago

15.0.3

1 year ago

15.0.4

11 months ago

15.0.2

1 year ago

15.0.0

1 year ago

15.0.1

1 year ago

14.1.16

1 year ago

14.1.10

2 years ago

14.1.14

1 year ago

14.1.13

1 year ago

14.1.12

1 year ago

14.1.11

1 year ago

14.1.15

1 year ago

14.1.8

2 years ago

14.1.9

2 years ago

14.1.7

2 years ago

14.1.3

2 years ago

14.1.4

2 years ago

14.1.5

2 years ago

14.1.6

2 years ago

14.1.0

2 years ago

14.1.1

2 years ago

14.1.2

2 years ago

12.8.0

2 years ago

13.0.0

2 years ago

12.7.0

2 years ago

12.7.1

2 years ago

12.7.2

2 years ago

12.7.3

2 years ago

12.7.4

2 years ago

12.7.5

2 years ago

13.1.0

2 years ago

14.0.0

2 years ago

12.6.1

2 years ago

12.6.2

2 years ago

12.6.3

2 years ago

12.6.0

2 years ago

12.5.9

2 years ago

12.5.3

2 years ago

12.5.4

2 years ago

12.5.5

2 years ago

12.5.6

2 years ago

12.5.7

2 years ago

12.5.8

2 years ago

12.4.0

2 years ago

12.4.1

2 years ago

12.4.2

2 years ago

12.3.0

2 years ago

12.3.1

2 years ago

12.3.2

2 years ago

12.3.3

2 years ago

12.5.2

2 years ago

12.5.0

2 years ago

10.0.5

3 years ago

10.0.6

3 years ago

10.0.7

3 years ago

10.0.8

3 years ago

10.0.9

3 years ago

10.0.1

3 years ago

10.0.2

3 years ago

10.0.3

3 years ago

10.0.4

3 years ago

12.0.0

2 years ago

10.0.11

3 years ago

10.2.0

3 years ago

10.2.1

3 years ago

12.2.1

2 years ago

12.2.0

2 years ago

11.0.0

3 years ago

10.1.4

3 years ago

10.1.5

3 years ago

10.1.6

3 years ago

10.1.0

3 years ago

10.1.1

3 years ago

10.1.2

3 years ago

10.1.3

3 years ago

12.1.0

2 years ago

10.0.0

3 years ago

9.0.1

3 years ago

9.0.0

3 years ago

9.2.4

3 years ago

9.2.3

3 years ago

9.2.2

3 years ago

9.2.1

3 years ago

9.1.1

3 years ago

9.1.0

3 years ago

9.2.0

3 years ago

7.3.1

3 years ago

7.3.0

3 years ago

8.0.0

3 years ago

7.2.0

3 years ago

7.1.0

3 years ago

6.2.0

3 years ago

7.0.0

3 years ago

6.1.1

3 years ago

6.1.0

3 years ago

6.0.3

3 years ago

6.0.2

3 years ago

6.0.1

3 years ago

6.0.0

3 years ago

5.6.0

3 years ago

5.5.0

3 years ago

5.4.2

3 years ago

5.4.1

3 years ago

5.4.0

3 years ago

5.3.0

3 years ago

5.2.3

3 years ago

5.2.2

3 years ago

5.2.1

3 years ago

5.2.0

3 years ago

5.1.0

3 years ago

5.0.0

3 years ago

4.2.3

3 years ago

4.2.2

3 years ago

4.2.1

3 years ago

4.2.0

4 years ago

4.1.2

4 years ago

4.1.1

4 years ago

4.1.0

4 years ago

4.0.9

4 years ago

4.0.8

4 years ago

4.0.7

4 years ago

4.0.6

4 years ago

4.0.5

4 years ago

4.0.4

4 years ago

4.0.3

4 years ago

4.0.2

4 years ago

4.0.1

4 years ago

4.0.0

4 years ago

3.0.0-alpha.8

4 years ago

3.0.0

4 years ago

3.0.0-alpha.7

4 years ago

3.0.0-alpha.6

4 years ago

3.0.0-alpha.5

4 years ago

3.0.0-alpha.4

4 years ago

3.0.0-alpha.3

4 years ago

3.0.0-alpha.2

4 years ago

3.0.0-alpha.1

4 years ago

3.0.0-alpha.0

4 years ago

2.11.0

4 years ago

2.10.1

4 years ago

2.10.0

4 years ago

2.9.0

4 years ago

2.7.2

4 years ago

2.8.0

4 years ago

2.9.1

4 years ago

2.7.0

4 years ago

2.7.1

4 years ago

2.6.0

4 years ago

2.5.2

4 years ago

2.5.1

4 years ago

2.5.0

4 years ago

2.4.0

4 years ago

2.3.1

4 years ago

2.3.0

4 years ago

2.2.0

4 years ago

2.1.2

4 years ago

2.1.1

4 years ago

2.1.0

4 years ago

2.0.2

4 years ago

2.0.1

4 years ago

2.0.0

4 years ago

1.6.1

4 years ago

1.6.0

4 years ago

1.6.0-alpha.1

4 years ago

1.6.0-alpha.0

4 years ago

1.5.9

4 years ago

1.5.8

4 years ago

1.5.7

4 years ago

1.5.6

4 years ago

1.5.5

4 years ago

1.5.3

4 years ago

1.5.2

4 years ago

1.5.1

4 years ago

1.5.0

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.1

4 years ago

1.3.0

4 years ago

1.2.0

5 years ago

1.1.0

5 years ago

1.0.0

5 years ago