1. Lynxspring, Inc.
  2. Untitled project
  3. NodeHaystack

Overview

HTTPS SSH

NodeHaystack

Project haystack light weight node.js compliant client and server implementation.

API Documentation

Usage

install nodehaystack via console from node application location

npm install nodehaystack

app.js - standard HTTP (no Express)

// Module dependencies .
var hs = require('nodehaystack'),
    http = require('http'),
    url = require('url');

// get the database - you will need to uncomment line #39 of index.js to use the TestDatabase
var db = new hs.TestDatabase();

var server = http.createServer(function (req, res) {
  req.setEncoding('utf8');
  req.on('readable', function() {
    var path = url.parse(req.url).pathname;

    // if root, then redirect to {haystack}/about
    if (typeof(path) === 'undefined' || path === null || path.length === 0 || path === "/") {
      res.writeHead(302, {'Location': '/about'});
      res.end();
      return;
    }

    // parse URI path into "/{opName}/...."
    var slash = path.indexOf('/', 1);
    if (slash < 0) slash = path.length;
    var opName = path.substring(1, slash);

    // resolve the op
    db.op(opName, false, function(err, op) {
      if (typeof(op) === 'undefined' || op === null) {
        res.writeHead(404, {'Content-Type': 'text/html'});
        res.write("404 Not Found");
        res.end();
        return;
      }

      // route to the op
      op.onServiceOp(db, req, res, function(err) {
        if (err) {
          console.log(err.stack);
          throw err;
        }

        res.end();
      });
    });
  });
});

server.listen(3000);
console.log('Node Haystack Toolkit listening at http://localhost:3000');

app.js - using Express

// Module dependencies.
var hs = require('nodehaystack'),
    express = require('express'),
    url = require('url'),
    bodyParser = require('body-parser');

// get the database - you will need to uncomment line #39 of index.js to use the TestDatabase
var db = new hs.TestDatabase();

var app = express();

app.use(bodyParser.text({ type: 'text/*' }));
app.use(bodyParser.json()); // if you are using JSON instead of ZINC you need this

app.all('*', function(req, res) {
  var path = url.parse(req.url).pathname;

  // if root, then redirect to {haystack}/about
  if (typeof(path) === 'undefined' || path === null || path.length === 0 || path === "/") {
    res.redirect("/about");
    return;
  }

  // parse URI path into "/{opName}/...."
  var slash = path.indexOf('/', 1);
  if (slash < 0) slash = path.length;
  var opName = path.substring(1, slash);

  // resolve the op
  db.op(opName, false, function(err, op) {
    if (typeof(op) === 'undefined' || op === null) {
      res.status(404);
      res.send("404 Not Found");
      res.end();
      return;
    }

    // route to the op
    op.onServiceOp(db, req, res, function(err) {
      if (err) {
        console.log(err.stack);
        throw err;
      }

      res.end();
    });
  });
});

var server = app.listen(3000, function() {

  var host = server.address().address;
  var port = server.address().port;

  if (host.length === 0 || host === "::") host = "localhost";

  console.log('Node Haystack Toolkit listening at http://%s:%s', host, port);

});

run from console

node app.js