tracks and traces

Serving a little service with node

I needed to have an easy way of communicating with the Stanford language parser. I had difficulty using the stanford-simple-nlp node package in Meteor directly, and got frustrated with debugging it, so I created another local HTTP server with Node that serves a single endpoint for parsing sentences. And it works!

var http = require('http');
var StanfordSimpleNLP = require('stanford-simple-nlp');
var httpdispatcher = require('httpdispatcher');

// listen on port 3xxx
const PORT = 3050; 

var stanfordSimpleNLP = new StanfordSimpleNLP.StanfordSimpleNLP();
var dispatcher = new httpdispatcher();

// load the Stanford Parser. this takes a little while.
stanfordSimpleNLP.loadPipelineSync();

// Lets use our dispatcher
function handleRequest(request, response){
    try {
        //log the request on console
        console.log(request.url);
        //Disptach
        dispatcher.dispatch(request, response);
    } catch(err) {
        console.log(err);
    }
}

// Create an endpoint for parsing a sentence.
dispatcher.onPost("/parse", function(req, res) {
	var text = req.params.text;
	console.log("Request: " + text);

	stanfordSimpleNLP.process(text, function(err, result) {
		if (err) {
			console.log(err);
			res.writeHead(500, {'Content-Type': 'text/plain'});
			res.end();
		} else {
			res.writeHead(200, {'Content-Type': 'text/plain'});
	    	res.end(JSON.stringify(result));
	    }
	});
});

// Create a server and start listening
var server = http.createServer(handleRequest);

server.listen(PORT, function(){
    console.log("Server listening on: http://localhost:%s", PORT);
});