node package manager
Painless code sharing. npm Orgs help your team discover, share, and reuse code. Create a free org »

appbase-js

Build Status Image Code Climate

appbase-js

Appbase.io is a data streams library for Node.JS and Javascript (browser build is in the browser/ directory); compatible with elasticsearch.js.

An up-to-date documentation for Node.JS API is available at http://docs.appbase.io/scalr/javascript/nodejs-intro.html.

Quick Example

Working code snippets where each step builds on the previous ones.

Step 1: Add some data into the app (uses elasticsearch.js)

// app and authentication configurations 
const HOST_URL = "https://scalr.api.appbase.io"
const APPNAME = "createnewtestapp01"
const CREDENTIALS = "RIvfxo1u1:dee8ee52-8b75-4b5b-be4f-9df3c364f59f"
 
// Add data into our ES "app index"
var Appbase = require("appbase-js")
var appbase = new Appbase({
        url: HOST_URL,
        app: APPNAME,
        credentials: CREDENTIALS
    });
appbase.index({
    type: "product",
    id: "1",
    body: {
        name: "A green door",
        price: 12.50,
        tags: ["home", "green"],
        stores: ["Walmart", "Target"]
    }
}).on("data", function(res) {
    console.log(res);
}).on("error", function(err) {
    console.log(err);
});

Step 2: Read the data stream from a particular DB location

Returns continous updates on a JSON document from a particular type.

appbase.getStream({
      type: "product",
      id: "1"
}).on("data", function(res) {
      // "data" handler is triggered every time there is a **new** document update.
      console.log(res);
}).on("error", function(err) {
      console.log("caught a stream error", err);
})

Note: Existing document value is returned via get() method.

Console Output
{ _index: "app`248",
  _type: "product",
  _id: "1",
  _version: 4,
  found: true,
  _source: 
   { name: "A green door",
     price: 12.5,
     tags: [ "home", "green" ],
     stores: [ "Walmart", "Target" ] } }

getStream() returns a stream.Readable object, which can be conveniently listened via the on("data") event listener. Check out the stream_document_test.js where we make an update to the document and see any further updates to it via the "data" event.

Step 3: Apply queries on data streams

Get continuous results by searching across the database streams. A query can be written using the ElasticSearch Query DSL - which supports composing boolean, regex, geo, fuzzy, range queries. Let's stream the results of a simple match_all query on the product type:

appbase.searchStream({
    type: "product",
    body: {
        query: {
            match_all: {}
        }
    }
}).on("data", function(res, err) {
    console.log(res);
}).on("error", function(err) {
    console.log("caught a stream error", err);
})
Console Output
{ took: 1,
  timed_out: false,
  _shards: { total: 1, successful: 1, failed: 0 },
  hits: 
   { total: 4,
     max_score: 1,
     hits: [ [Object], [Object], [Object], [Object] ] } }

searchStream() also returns a stream.Readable object, which can be conveniently listened via the on("data") event listener. Check out the stream_search_test.js where we make an update that matches the query and see the results in the event stream.

API Reference

For a complete API reference, check out JS API Ref doc.

Global

new Appbase(args)

Returns a reference object on which streaming requests can be performed.

args - A set of key/value pairs that configures the ElasticSearch Index
    url: "https://scalr.api.appbase.io"
    app: App name (equivalent to an ElasticSearch Index)
    credentials: A username:password combination used for Basic Auth.

Optionally (and like in the quick example above), url can contain the credentials field in the format: https://<credentials>@scalr.appbase.io.

Reference

reference.getStream(args)

Get continuous updates on a JSON document with a type and id. Returns a stream.Readable object.

args - A set of key/value pairs that makes the document URL
    type: ElasticSearch Type, a string
    id: Valid Document ID

reference.searchStream(args)

Get continuous updates on search queries (fuzzy, boolean, geolocation, range, full-text). Returns a stream.Readable object.

args - A set of key/value pairs that makes the document URL
    type: ElasticSearch Type, a string
    body: A JSON Query Body (Any query matching the ElasticSearch Query DSL)