O'Reilly logo

Node for Front-End Developers by Garann Means

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Receiving Data from a POST

The more traditional model of getting user data—taking a POST request from a form—might not be the first thing you’d think of using Node for, but of course it’s still necessary. In fact, handling a POST may provide one of the most concise explanations of how Node differs from other server setups, and how it might make more sense in the context of the way the web actually works. The ServerRequest object (the req argument in our callbacks) has no property containing the parameters passed along in a POST, but it is an EventEmitter. EventEmitter is the generic object type in Node for things that—as you might expect—emit events. Rather than looking at a property on req to find posted data, we add an event subscriber to listen for it.

All EventEmitter subscribers, including the subscribers belonging to ServerRequest, are created by the on() function, which needs an event type and a callback as parameters, at minimum. (The addListener() function does the same thing.) The request data will come across in chunks, so we’re not waiting to receive all of it before other code can run. Here, we’ll create listeners for the receipt of data and the end of the request, saving all the chunks of data, but not expecting it to be present until the request is complete:

var http = require("http"), fs = require("fs"), querystring = require("querystring"); http.createServer(function(req, res) { var data = ""; // serve static form if (req.method == "GET") { getFile(__dirname + "/public/simpleForm.html", ...

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required