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?
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) });
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With