node.jshttp-post

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?


Solution

  • 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: "john@example.com"
            }
        })
    });
    

    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)
    });