Nutmeg Pumpkin Macchiato

    fh-webapp

    0.6.7 • Public • Published

    fh-webapp is part one of a two-part replacement for fh-nodeapp. Webapp is the "'"hostapp" part of fh-nodeapp, that which makes public endpoints from exported functions in cloud/main.js. It also hosts some system-level piping to help the studio determine if an app is online, the endpoints it exposes), and introduces a new namespace - /mbaas.

    Usage

    Add the following to the 'dependencies' section of your 'cloud/package.json' file:

    "fh-webapp" : "*",
    "fh-api" : "*",
    "express" : "3.3.4"
    

    Add a file to your FeedHenry app 'cloud/application.js', with the following contents:

    var webapp = require('fh-webapp');
    var express = require('express');
    $fh = require('fh-api');
    var mainjs = require('main.js');
    
    var app = express();
    app.use('/sys', webapp.sys(mainjs));
    app.use('/mbaas', webapp.mbaas);
    app.use('/cloud', webapp.cloud(mainjs));
    
    // You can define custom URL handlers here, like this one:
    app.use('/', function(req, res){
      res.end('Your Cloud App is Running');
    });
    
    module.exports = app.listen(process.env.FH_PORT || process.env.VCAP_APP_PORT || 8001);
    

    Customising & Extending

    The above application.js is just an Expressjs application - it's easily extensible.

    Custom APIs

    You can create custom API handlers in the Express format by doing:

    app.use('/myapi', function(req, res){
      res.end('My custom response');
    });
    

    Serving Static Files

    Express has a built-in static file server. In this example, we host files under the public directory:

    app.use(express.static(__dirname + '/public'));
    

    REST API

    Cloud

    (POST | GET | PUT) /cloud/:someFunction

    Authentication : Optional - can be enabled globally or on a per-endpoint basis under "Endpoints" section of the studio. Response formats : JSON, binary, plain text

    Headers

    x-fh-auth-app : API key of your application, found under the "details" section of the studio.

    Body:

    JSON format - paramaters to be passed to the exported function, see 'Writing API Functions'.

    Response:

    Result as passed to the callback function of the exported function - see 'Writing API Functions'.

    Writing API functions

    The cloud namespace exposes the public functions of a javascript file of your choice (traditionally 'main.js') as public endpoints under the cloud URL namespace. :someFunction is the name of a function attached to the 'exports' object. These functions take two paramaters - the first is the data sent in the POST, the second is the callback function to call.

    exports.getConfig = function (params, callback){
      // Do some work here, then return data
      var err = false;
    
      // Check if some error condition happened first
      if (err){
        return callback(err);
      }
      return callback(null, res);
    }
    

    mBaaS

    POST /mbaas/db

    Authentication : Required - App API key goes here. Response format : JSON

    Headers

    x-fh-auth-app : API key of your application, found under the "details" section of the studio.

    POST Body:

    JSON body - same as $fh.db params. A summary of body options follows - For more, see $fh.db docs

    {
        "act": "create|update|list|delete|deleteall",
        "type": "collectionName",
        "guid": "GUID of object operating on - not required for list or deleteall",
        "fields": "JSON definition of fields - required for create|update",
        "eq|ne|in" : "JSON definition of query to match - supported for list only"
    }
    

    Response:

    As per $fh.db

    Sys

    GET /sys/info/ping

    Authentication : None Response formats : Plaintext

    Headers

    None

    Response:

    "OK"
    

    if application is running as expected. Will respond with a 404 otherwise

    GET /sys/info/endpoints

    Authentication : None Response formats : JSON

    Headers

    None

    Response:

    {
      endpoints : ['array of endpoints exported as public functions']
    }
    

    GET /sys/info/memory

    Authentication : None Response formats : JSON

    Headers

    None

    Response:

    {
      rss: 13721600, // Resident set size
      heapTotal: 7195904, // V8's total available memory
      heapUsed: 2369744  // V8's used memory
    }
    

    GET /sys/info/memory

    Authentication : None Response formats : Plaintext

    Headers

    None

    Response:

    0.1.0
    

    Keywords

    none

    Install

    npm i fh-webapp

    DownloadsWeekly Downloads

    2

    Version

    0.6.7

    License

    none

    Last publish

    Collaborators

    • feedhenry
    • feedhenry-dev
    • grdryn