2

Express req.body returns empty

I could not figure out why its empty, I added body parser and also see other posts no answers solved my problem, I am new to this below is my code:

I checked many other places and here also (Node.js/Express form post req.body not working)

My app.js:

         var createError = require('http-errors');
    var express = require('express');
    var path = require('path');
    var cookieParser = require('cookie-parser');
    var logger = require('morgan');

    var bodyParser = require('body-parser')

    var indexRouter = require('./routes/index');
    var usersRouter = require('./routes/users');
    var notesRouter = require('./routes/notes');


    var app = express();

    app.use(bodyParser.urlencoded({extended:true}));
    app.use(bodyParser.json());
    // view engine setup
    app.set('views', path.join(__dirname, 'views'));
    //app.set('view engine', 'jade');
    app.set('view engine', 'ejs');




    app.use(logger('dev'));
    app.use(express.json());
    app.use(express.urlencoded({ extended: false }));
    app.use(cookieParser());
    app.use(express.static(path.join(__dirname, 'public')));




    app.use('/', indexRouter);
    app.use('/users', usersRouter);
    app.use('/notes', notesRouter);


    // catch 404 and forward to error handler
    app.use(function(req, res, next) {
      next(createError(404));
    });

    // error handler
    app.use(function(err, req, res, next) {
      // set locals, only providing error in development
      res.locals.message = err.message;
      res.locals.error = req.app.get('env') === 'development' ? err : {};

      // render the error page
      res.status(err.status || 500);
      res.render('error');
    });

    module.exports = app;

my html form:

     <form action="/notes" method="POST" enctype="application/x-www-form-urlencoded">
        <input placeholder="Title"  type="text"> <br />
        <textarea placeholder="Details"></textarea> <br />
        <input type="submit" value="Save" />
      </form>

and my notes route where I post the form:

        var express = require('express');
    var router = express.Router();

    /* GET home page. */
    router.get('/', function(req, res, next) {
    res.render('notes', { title: 'Express' });
    });
    /* POST home page. */
    router.post('/', function(req, res, next) {
        console.log('------------------------------------------posted notes----');
        console.log(req);
        console.log(req.body);
        //console.log(res);
        console.log('-----------');
        //console.log(req);
    //res.render('notes', { title: 'Express' });
    });

    module.exports = router;
Math
  • 399
  • 1
  • 6
  • 14

1 Answers1

3

You are missing name attributes in your form

<form action="/notes" method="POST" enctype="application/x-www-form-urlencoded">
  <input placeholder="Title"  type="text" name='title'> <br />
  <textarea placeholder="Details" name='details'></textarea> <br />
  <input type="submit" value="Save" />
</form>
fedesc
  • 2,554
  • 2
  • 23
  • 39