Search code examples
node.jsexpressmailgun

body inside express middleware is empty


i'm receiving emails from mailgun so i set my endpoint as follow

app.post(
'http://www.example.com/mail',
async(req, res, next) => {
   // i want to check if email coming from mailgun
  // so i want to set if statement using the req.body['X-Mailgun-Coming']
  // which should be Yes
 // but i got empty body object
},
uploadHandler.any(),
comingEmails // but body in this function has the required data
)

as you can see i got empty body in the middle ware but in the main function, body has the required and i has access to this data

note ==> this only happens when email has attachment


Solution

  • uploadHandler.any() has to be BEFORE where you check req.body because it is that middleware that actually reads the body of the request and populates req.body. So, you are trying to read req.body before the code runs that actually puts the value in it.

    Here's how you would put it before you try to use req.body.

    app.post(
        'http://www.example.com/mail',
        uploadHandler.any(),
        async(req, res, next) => {
           // i want to check if email coming from mailgun
           // so i want to set if statement using the req.body['X-Mailgun-Coming']
           // which should be Yes
           next();
        },
        comingEmails
    );