Monday 8 May 2017

why is my express POST giving blank in req.body? nodejs

I have checked that my data is passed correctly, db is connected but also, using ajax it gives me success call back with the id returned.

But somehow my data isn't passing through, when I even try req or req.body I see that body is blank like this {}

I have this as my form in html

                <form>
                    <label for="">Name</label>
                    <input class="form-control" type="text" placeholder="Your Name" name="name">
                    <label for="">Email</label>
                    <input class="form-control" type="text" placeholder="example@hackhub.com" name="email">
                    <label for="">Subject</label>
                    <input class="form-control" type="text" placeholder="Subject" name="subject">
                    <label for="">Message</label>
                    <textarea class="form-control" placeholder="Message" id="" cols="30" rows="5" name="body"></textarea>
                    <input class="contact-btn" type="submit">
                </form>

as for my ajax call

    $('.contact-btn').on('click', function (e) {
        e.preventDefault();
        var data = {
            'name': $('input[name="name"]').val(),
            'email': $('input[name="email"]').val(),
            'subject': $('input[name="subject"]').val(),
            'body': $('textarea[name="body"]').val()
        }

        console.log(data);

        $.ajax({
            method : "POST",
            url: '/contact/test',
            dataType: "json",
            data: {'name': 'testingaodk'}, // I added this to give it a direct test ( I was using data:data
            success: function (data) {
                console.log(data);
            },
            error: function (err) {
                console.log(err);
            }
        })
    })

in my express

var express = require('express');
var app = express();
var path = require('path');
var mongoose = require('mongoose');
var cors = require('cors');
var bodyParser = require('body-parser');
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));

app.post('/contact/test', function (req, res) {
    var newContact = new Contact(req.body);
    console.log(req);
    newContact.save(function (err, doc) {
        res.send(doc);
    });
});

in my console.log I do see data passed back successfully with random id passed back.

Also, in express console I can see something like this

locals: {} },
body: {},
route:
    Route {
    path: '/contact/test',
        stack: [ [Object] ],
        methods: { post: true } } }

meaning body is empty but why though?

Can someone please give me a hand?

Thanks in advance.



via Tsuna

No comments:

Post a Comment