Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to process POST data in Node.js?

How do you extract form data (form[method="post"]) and file uploads sent from the HTTP POST method in Node.js?

I've read the documentation, googled and found nothing.

function (request, response) {     //request.post???? } 

Is there a library or a hack?

like image 213
Ming-Tang Avatar asked Nov 28 '10 07:11

Ming-Tang


2 Answers

If you use Express (high-performance, high-class web development for Node.js), you can do this:

HTML:

<form method="post" action="/">     <input type="text" name="user[name]">     <input type="text" name="user[email]">     <input type="submit" value="Submit"> </form> 

API client:

fetch('/', {     method: 'POST',     headers: {         'Content-Type': 'application/json'     },     body: JSON.stringify({         user: {             name: "John",             email: "[email protected]"         }     }) }); 

Node.js: (since Express v4.16.0)

// Parse URL-encoded bodies (as sent by HTML forms) app.use(express.urlencoded());  // Parse JSON bodies (as sent by API clients) app.use(express.json());  // Access the parse results as request.body app.post('/', function(request, response){     console.log(request.body.user.name);     console.log(request.body.user.email); }); 

Node.js: (for Express <4.16.0)

const bodyParser = require("body-parser");  /** bodyParser.urlencoded(options)  * Parses the text as URL encoded data (which is how browsers tend to send form data from regular forms set to POST)  * and exposes the resulting object (containing the keys and values) on req.body  */ app.use(bodyParser.urlencoded({     extended: true }));  /**bodyParser.json(options)  * Parses the text as JSON and exposes the resulting object on req.body.  */ app.use(bodyParser.json());  app.post("/", function (req, res) {     console.log(req.body.user.name) }); 
like image 26
Baggz Avatar answered Oct 23 '22 22:10

Baggz


You can use the querystring module:

var qs = require('querystring');  function (request, response) {     if (request.method == 'POST') {         var body = '';          request.on('data', function (data) {             body += data;              // Too much POST data, kill the connection!             // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB             if (body.length > 1e6)                 request.connection.destroy();         });          request.on('end', function () {             var post = qs.parse(body);             // use post['blah'], etc.         });     } } 

Now, for example, if you have an input field with name age, you could access it using the variable post:

console.log(post.age); 
like image 123
Casey Chu Avatar answered Oct 23 '22 22:10

Casey Chu