Code Monkey home page Code Monkey logo

nodejs-base-image's Introduction

nodejs-base-image

JavaScript (Node.js) support for Dispatch

Latest image on Docker Hub: dispatchframework/nodejs-base:0.0.8

Usage

You need a recent version of Dispatch installed in your Kubernetes cluster, Dispatch CLI configured to use it.

Adding the Base Image

To add the base-image to Dispatch:

$ dispatch create base-image nodejs-base dispatchframework/nodejs-base:0.0.8

Make sure the base-image status is READY (it normally goes from INITIALIZED to READY):

$ dispatch get base-image nodejs-base

Adding Runtime Dependencies

Library dependencies listed in package.json (npm dependency manifest) need to be wrapped into a Dispatch image. For example, suppose we need a math library:

$ cat ./package.json
{
    "dependencies": {
      "mathjs": "4.1.2"
    }
}
$ dispatch create image nodejs-mylibs nodejs-base --runtime-deps ./package.json

Make sure the image status is READY (it normally goes from INITIALIZED to READY):

$ dispatch get image nodejs-mylibs

Creating Functions

Using the Node.js base-image, you can create Dispatch functions from Node.js (javascript) source files. The file can require any libraries from the image (see above).

The only requirement is: module.exports must be set to a function that accepts 2 arguments (context and payload), for example:

$ cat ./demo.js
const math = require('mathjs');
module.exports = function (context, payload) {
    return { myField: math.chain(payload.val).add(4).divide(4).done() }
};
$ dispatch create function nodejs-mylibs math-js ./demo.js

Make sure the function status is READY (it normally goes from INITIALIZED to READY):

$ dispatch get function math-js

Running Functions

As usual:

$ dispatch exec --json --input '{"val": 12}' --wait math-js
{
    "blocking": true,
    "executedTime": 1524612028,
    "faasId": "9ff4d69e-44e7-4ad3-a54c-6cfeb06729dd",
    "finishedTime": 1524612028,
    "functionId": "931828dc-87b8-43c7-b990-cb3f027f1e47",
    "functionName": "math-js",
    "input": {
        "val": 12
    },
    "logs": {
        "stderr": null,
        "stdout": null
    },
    "name": "28d9acec-b9c2-408c-876a-1ef14611a803",
    "output": {
        "myField": 4
    },
    "reason": null,
    "secrets": [],
    "services": null,
    "status": "READY",
    "tags": []
}

Error Handling

There are three types of errors that can be thrown when invoking a function:

  • InputError
  • FunctionError
  • SystemError

SystemError represents an error in the Dispatch infrastructure. InputError represents an error in the input detected either early in the function itself or through input schema validation. FunctionError represents an error in the function logic or an output schema validation error.

Functions themselves can either throw InputError or FunctionError

Input Validation

For Node.js, the following exceptions thrown from the function are considered InputError:

  • TypeError

All other exceptions thrown from the function are considered FunctionError.

To validate input in the function body:

module.exports = function(context, payload) {
    if (typeof payload !== 'string') {
        throw new TypeError("payload is not of type string");
    }

    return payload.toLowerCase();
};

Note

Since TypeError is considered an InputError, functions should not throw it unless explicitly thrown due to an input validation error. Functions should catch and handle TypeError accordingly if it should not be classified as an InputError.

nodejs-base-image's People

Contributors

imikushin avatar rjew avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.