Reputation: 107
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
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
Reputation: 820
Try removing value=""
from your input. I think you are setting always as empty this way.
Upvotes: 0