@lucyus/falcon
TypeScript icon, indicating that this package has built-in type declarations

0.1.3 • Public • Published

Falcon

Falcon is a lightweight HTTP client and server framework for Node.js.

Install

Make sure you have npm or yarn installed.

Then run in your favorite Terminal :

npm install @lucyus/falcon

OR

yarn install @lucyus/falcon

Features

  • HTTP
  • HTTPS
  • WebSocket
  • WebSocket Secure

Usage

HTTP Server

const { Server, HTTP_STATUS_NAME } = require('@lucyus/falcon');
const httpServer = new Server({
    port: 8000,
    router: {
        routes: [
            {
                path: "/",
                method: "GET",
                behavior: (request, response, routeData) => {
                    response.headers.set("Content-Type", {
                        type: "text/plain"
                    });
                    response.status = {
                        code: 200,
                        name: HTTP_STATUS_NAME[200]
                    };
                    response.body.content = "Server is running!";
                    return response;
                }
            }
        ]
    }
    /* ... see ServerOptions for more ... */
});
httpServer.start()
    .then(() => {
        console.log("Server started at: http://localhost:8000");
    });

HTTPS Server

Assuming you have valid server.key and server.crt in current directory:

const { Server, HTTP_STATUS_NAME } = require('@lucyus/falcon');
const httpsServer = new Server({
    port: 8000,
    openSsl: {
        paths: {
            serverKey: "server.key",
            serverCertificate: "server.crt"
        }
    },
    router: {
        routes: [
            {
                path: "/",
                method: "GET",
                behavior: (request, response, routeData) => {
                    response.headers.set("Content-Type", {
                        type: "text/plain"
                    });
                    response.status = {
                        code: 200,
                        name: HTTP_STATUS_NAME[200]
                    };
                    response.body.content = "Server is running!";
                    return response;
                }
            }
        ]
    }
    /* ... see ServerOptions for more ... */
});
httpsServer.start()
    .then(() => {
        console.log("Server started at: https://localhost:8000");
    });

WebSocket

const { Server, HTTP_STATUS_NAME } = require('@lucyus/falcon');
const httpServer = new Server({
    port: 8000,
    router: {
        routes: [
            {
                path: "/",
                method: "GET",
                behavior: (request, response, routeData) => {
                    response.headers.set("Content-Type", {
                        type: "text/html"
                    });
                    response.status = {
                        code: 200,
                        name: HTTP_STATUS_NAME[200]
                    };
                    response.body.content = `
                    <!DOCTYPE html>
                    <html>
                        <head>
                            <title>HTTP with WebSocket</title>
                        </head>
                        <body>
                            <h1>HTTP with WebSocket</h1>
                            <p>You can inspect your browser's "Network" tab to read WebSocket messages!</p>
                            <script>
                                const socket = new WebSocket("ws://localhost:8000/");
                                socket.addEventListener("open", (event) => {
                                    console.log("WebSocket connection established!");
                                    socket.send("Hello, server!");
                                });
                                socket.addEventListener("message", (event) => {
                                    console.log("WebSocket message received:", event.data);
                                });
                                socket.addEventListener("close", (event) => {
                                    console.log("WebSocket connection closed!");
                                });
                                socket.addEventListener("error", (event) => {
                                    console.log("WebSocket error:", event);
                                });
                            </script>
                        </body>
                    </html>
                    `;
                    return response;
                }
            }
        ]
    },
    webSocketRouter: {
        routes: [
            {
                path: "/",
                shouldHandshake: (request, response, routeData) => {
                    return {
                        acceptContext: "You can pass any contextual data in any type about the client to the handlers here!"
                    };
                },
                handlers: {
                    onJoin: (webSocketManager, clientData) => {
                        return `Hello, ${clientData.client.remoteAddress}:${clientData.client.remotePort}!`;
                    },
                    onMessage: (message, webSocketManager, clientData) => {
                        return `Got it, ${clientData.client.remoteAddress}:${clientData.client.remotePort}!`;
                    },
                    onError: (error, webSocketManager, clientData) => {
                        return `Something went wrong, ${clientData.client.remoteAddress}:${clientData.client.remotePort}!`;
                    },
                    onLeave: (webSocketManager, clientData) => {
                        console.log(`Goodbye, ${clientData.client.remoteAddress}:${clientData.client.remotePort}!`);
                    }
                }
            }
        ]
    }
    /* ... see ServerOptions for more ... */
});
httpServer.start()
    .then(() => {
        console.log("Server started at: http://localhost:8000");
    });

Note: You can also use WebSockets with HTTPS servers.

License

This project is made under the Apache 2.0 license.

Package Sidebar

Install

npm i @lucyus/falcon

Weekly Downloads

1

Version

0.1.3

License

Apache-2.0

Unpacked Size

994 kB

Total Files

799

Last publish

Collaborators

  • lucyus