2 Ways for Sending POST Data
HTTP allows 2 ways of sending POST data to server :
- Content-Type - application/x-www-form-urlencoded
In this the POST data is send as a long query string (just like GET parameters in a url). The query string consists of name-value pairs separated by a & character. Data is url encoded.
The above image shows application/x-www-form-urlencoded POST data, with 3 POST parameters.
- Content-Type - multipart/form-data
In this POST data is send as chunks, where each POST parameter is separated by a specific boundary. This is mostly used to upload files.
The above image shows the same POST request as above, except that the content-type is multipart/form-data.
This tutorial shows only the case of application/x-www-form-urlencoded POST request.
To get POST parameters in a multipart/form-data POST, you need to install an external module such as Multer or Formidable.
querystring Module to Read POST Data
querystring is Node.js inbuilt module that has methods to read a query string. The parse method reads the query string and returns a Javascript object.
const http = require('http'),
querystring = require('querystring');
const server = http.createServer((request, response) => {
if(request.method === 'POST' && request.url === '/form-submit') {
let body = '';
// very important to handle errors
request.on('error', (err) => {
if(err) {
response.writeHead(500, {'Content-Type': 'text/html'});
response.write('An error occurred');
response.end();
}
});
// read chunks of POST data
request.on('data', chunk => {
body += chunk.toString();
});
// when complete POST data is received
request.on('end', () => {
// use parse() method
body = querystring.parse(body);
// { name: 'John', gender: 'MALE', email: 'john@gmail.com' }
console.log(body);
// rest of the code
});
}
// rest of the code
});
server.listen(3000);