Skip to content

NatLabRockies/nodehaystack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

58 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

NodeHaystack

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

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

Packages

No packages published

Contributors 3

  •  
  •  
  •