SlowHusky
SlowHusky

Reputation: 107

Express4 returns error in a POST request

I recive a "Express.js returns error in a POST request" when I try to send data in a POST resquest. How I can fix it?

My app.js code:

var express = require('express');
var bodyParser = require('body-parser')
var app = express();
var form = require('./routes/form')(app);

app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.static(__dirname + '/public'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.listen(7777, function(){
  console.log("Running...")
});

My form.js code:

module.exports = function(app){

  app.get('/form', function(req, res){
    res.render('form');
  });

  app.post('/send', function(req, res){
    console.log(req.body.name);
  });

};

My form.ejs code:

<form action="/send" method="post">
  <input type="text" name="name" value="">
  <input type="submit" value="Submit">
</form>

Console error:

TypeError: Cannot read property 'name' of undefined
    at /home/victor/cam/CAMTalk/routes/form.js:9:25
    at Layer.handle [as handle_request] (/home/victor/cam/CAMTalk/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/victor/cam/CAMTalk/node_modules/express/lib/router/route.js:131:13)
    at Route.dispatch (/home/victor/cam/CAMTalk/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/home/victor/cam/CAMTalk/node_modules/express/lib/router/layer.js:95:5)
    at /home/victor/cam/CAMTalk/node_modules/express/lib/router/index.js:277:22
    at Function.process_params (/home/victor/cam/CAMTalk/node_modules/express/lib/router/index.js:330:12)
    at next (/home/victor/cam/CAMTalk/node_modules/express/lib/router/index.js:271:10)
    at expressInit (/home/victor/cam/CAMTalk/node_modules/express/lib/middleware/init.js:33:5)
    at Layer.handle [as handle_request] (/home/victor/cam/CAMTalk/node_modules/express/lib/router/layer.js:95:5)

Thanks for the attention!

Upvotes: 0

Views: 50

Answers (2)

dNitro
dNitro

Reputation: 5345

You dont yet mounting your middlewares on app when you pass it to form. you first should mount your middle wares at least the body-parser one which is responsible for populating req.body. so move:

var form = require('./routes/form')(app);

after your body-parser middle ware and it should work.

In general order matters.

Upvotes: 1

deniscapp
deniscapp

Reputation: 820

Try removing value="" from your input. I think you are setting always as empty this way.

Upvotes: 0

Related Questions