Reputation: 59
Here are my codes:
var express = require('express');
var app = express();
app.get('/:name', function(req,res){
res.setHeader('Content-Type','text/html');
res.send('<form action="/" method="POST"><input type="text" name="self"/><input type="submit"/></form>');
});
app.post('/',function(req,res){
res.send(req.body.self);
});
app.listen(8080);
I call localhost:8080/examplename
and write something inside of input, and I click submit button. It goes to localhost:8080 but node returns error as below:
TypeError: Cannot read property 'self' of undefined
at /home/yusuf/Masaüstü/node/ue.js:10:19
at callbacks (/home/yusuf/Masaüstü/node/node_modules/express/lib/router/index.js:160:37)
at param (/home/yusuf/Masaüstü/node/node_modules/express/lib/router/index.js:134:11)
at pass (/home/yusuf/Masaüstü/node/node_modules/express/lib/router/index.js:141:5)
at Router._dispatch (/home/yusuf/Masaüstü/node/node_modules/express/lib/router/index.js:169:4)
at Object.router [as handle] (/home/yusuf/Masaüstü/node/node_modules/express/lib/router/index.js:32:10)
at next (/home/yusuf/Masaüstü/node/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Object.expressInit [as handle] (/home/yusuf/Masaüstü/node/node_modules/express/lib/middleware.js:31:5)
at next (/home/yusuf/Masaüstü/node/node_modules/express/node_modules/connect/lib/proto.js:190:15)
at Object.query [as handle] (/home/yusuf/Masaüstü/node/node_modules/express/node_modules/connect/lib/middleware/query.js:44:5)
Upvotes: 2
Views: 1444
Reputation: 1109
You need to enable the body parser middleware. Insert this before you configure your routes.
app.use(express.bodyParser());
You can also configure other things here, such as the view engine, static directory, etc. For example,
app.set('views', __dirname + '/views');
app.set('view engine', 'swig');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
Upvotes: 4
Reputation: 13799
You need the bodyParser. Here is your exact code, with the parser added, and working as expected:
var express = require('express');
var app = express();
// parses POST bodies:
app.use(express.bodyParser());
app.get('/:name', function(req,res){
res.setHeader('Content-Type','text/html');
res.send('<form action="/" method="POST"><input type="text" name="self"/><input type="submit"/></form>');
});
app.post('/',function(req, res){
res.send(req.body.self);
});
app.listen(8080);
Upvotes: 0
Reputation: 2684
req.body allows you to get the data sent in POST. You can then use req.body.[name of data] to actually access data. For example, if you sent a "firstname":
req.body.firstname
You can also use res.render to send data to your template page. For example, this sends the firstname to your index page rendered by your templating language.
res.render('index', {fname: req.body.firstname});
Upvotes: 1