The frontserver of the private RC-Network
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Go to file
Trivernis 1ba973ba3f
Merge pull request #14 from Trivernis/renovate/pin-dependencies
Pin dependencies
6 years ago
.circleci Changes in testing config 6 years ago
config Updated Documentation 6 years ago
glob Statuscodes and Cleanups 6 years ago
lib Merge branch 'develop' of https://github.com/trivernis/rcn-frontserver into develop 6 years ago
res Additional Code-Cleanup 6 years ago
.gitignore Code-Cleanup 6 years ago
LICENSE Restored Content 6 years ago
README.md README Badges 6 years ago
package.json Pin dependencies 6 years ago
renovate.json Add renovate.json 6 years ago
server.js Updated Documentation 6 years ago

README.md

rcn-frontserver License: GPL v3 CircleCI CodeFactor

This is the front-end web-server of the Raspberry Communication Network (that is still in development).

Contents

  1. Requirements
  2. Getting Started
  3. Arguments
  4. Configuration
    1. Routes for each type of file
    2. Mounting external folders
  5. Cool Features
  6. Roadmap

Requirements

You need to have Node.js installed to run this script. Just in case update your npm with the command:

npm install -g npm@latest

Getting started

To install the dependencies listed above, run the following from the commandline.

npm install

Now you can run the server by typing:

node server.js

Arguments

Just type node server.js -h or

Usage: server.js [options]

Options:
   -h, --help  show this help message and exit
   -p, --port  define the port for the server to run on
   --loglevel  define at which level the console should output
   --test      start the server and exit after 10 seconds

Configuration

This configuration applies to the server.json.

Routes for each type of file

In the server.json all common web file-types have their own configuration at routes.

{
  "routes": {
    ".html": {
      "path": "./res/html/",
      "mime": "text/html"
    }
  }
}

In the configuration a path and mime-type is defined. When the server starts recieves a request, it reads the configuration and searches for the file in the specific route. If the file exists it gets transportet with the defined mime-type. The type of the file is determined with the file's extension.

Mounting external folders

It is also possible to mount additional folders into the web-application by defining them at mounts. Mounts are more important than routes so when the server recieves a request, it first looks if the request-url has a mounted directory (or file).

{
  "mounts": [
    {
      "path": "./path/to/directory/",
      "mount": "/mount/"
    }
  ]
}

The path Attribute defines the mounted directory (of file) on the local filesystem. The mount attribute defines where the directory is mounted in the web-application. The mount-path supports RegEx strings (the value is interpreted as a regular Expression by default).

Cool features

Embedding SASS-Stylesheets, Vue.js and jQuery

This server automatically embeds Vue.js, jQuery and the script.js and style.sass stored in ./glob. And yeah, that's right. You can embed .sass-files. When encountering a .sass file, the server compiles it into .css. The result will then be stored in the ./.cache directory. The server also detects changes on the original file and refreshes the cached file when the change was detected. The refreshing only happens, when the file was requested.

Roadmap

  • SASS-Files and caching of preprocessed files
  • Mounting of folders or files on other locations (by using the config.json)
  • A package.json because it seems to be important nowadays
  • HTTP-Statuscode integration with specific pages
  • Handling POST-Methods
  • Integrating Backend-Applications via a standardized JSON-interface
  • Change from JSON to CSON and consider this in the standardized interface