Search code examples
node.jsexpressangular2-routing

How to read data in express js from form data


Here is request payload I can see in console

 ------WebKitFormBoundaryW5j4rbM04jMUgOkU
    Content-Disposition: form-data; name="file"; filename="Screenshot from 2016-12-12 18-34-26.png"
    Content-Type: image/png
    
    
    ------WebKitFormBoundaryW5j4rbM04jMUgOkU
    Content-Disposition: form-data; name="userId"
    
    12
    ------WebKitFormBoundaryW5j4rbM04jMUgOkU
    Content-Disposition: form-data; name="isAdmin"
    
    true
    ------WebKitFormBoundaryW5j4rbM04jMUgOkU--

I need to read userId which is there

name="userId"

    12

but my req.body is blank JSON {}. how to read this?

app.js

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

routes.js

    var employeeDocumentStorage = multer.diskStorage({
      destination: function (req, file, cb) {
****//need to read data here**** 
        console.log("uploading");
        console.log(file);
        var x = (JSON.parse(req.body));
        console.log(x)
    
        //var code = JSON.parse(req.body.model).empCode;
        var dest = 'public/documents/vss811/';
        mkdirp(dest, function (err) {
            if (err) cb(err, dest);
            else cb(null, dest);
        });
      },
      filename: function (req, file, cb) {
        cb(null, Date.now()+'-'+file.originalname);
      }
    });

Solution

  • As Alex has said in comments, you won't get this with body-parser. Your request payload shows that you seem to be using form-data content type.

    You can use multer to get form-data payloads - and your route already shows you're using multer (var employeeDocumentStorage = multer.diskStorage({)):

    const express = require('express')
    const upload  = require('multer')({ dest: '/tmp/' });
    
    app.post('/some-route', upload.single('name'), function (req, res, next) {
      console.log(req.body.userId); // should show 12
      console.log(req.files); // that's your file there.
      // do stuff.
    });