The App Hook

In JavaScript the app hook is based on JSGI which provides a common interface for JavaScript web application development. The app script must export a function named app that accepts a request object and returns a response object.

export.app = function(request) {
  // handle the request and return a response
}

The function must be exported from a file named main.js in a named application directory. Application directories live under the scripts/apps directory in the root of the data directory:

GEOSERVER_DATA_DIR/
  ...
  scripts/
    apps/
      app1/
        main.js
        ...
      app2/
        main.js
        ...

The application is web accessible from the path /script/apps/{app} where {app} is the name of the application. All requests that start with this path are dispatched to the app function in main.js.

Hello World Example

In this example a simple “Hello World” application is built. The first step is to create a directory for the app named hello:

cd $GEOSERVER_DATA_DIR/scripts/apps
mkdir hello

Next step is to create the main.js file:

cd hello
touch main.js

Within the app function the following things will happen:

  1. Report an HTTP status code of 200
  2. Declare the content type of the response, in this case “text/plain”
  3. Generate the body of response, in this case the string “Hello World”

This is accomplished with the following code:

export.app = function(request) {
  return {
    status: 200, // step 1
    headers: {"Content-Type": "text/plain"}, // step 2
    body: ["Hello World"] // step 3
  };
};

The body of the response shown above is an array. In general, this can be any object with a forEach method. In this way, an app can returned chunked content instead of returning the entire body content at once.