I have looked at all similar questions and none are working for me. I have a node js app in which I cannot print the input text from a form, using body-parser.
My index.ejs:
<form id="demo-2" method = "POST" action="/search">
<input type="search" name = "searcher" placeholder="Search">
</form>
Index.js:
var cool = require('cool-ascii-faces');
var express = require('express');
var app = express();
var pg = require('pg');
var bodyParser = require('body-parser');
var env = require('node-env-file');
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/views/'));
// views is directory for all template files
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
//app.use(express.bodyParser());
//DIFFERENT APPS - tells them what to do
app.post('/search', function(request, response) {
//var username = req.body;
console.log("posted something"+ request.body.searcher);
response.end("something was posted: "+ request.body.searcher);
});
app.get('/search', function(request, response) {
response.send("skylarr");
});
And despite using the input's name searcher I get error: TypeError: Cannot read property 'searcher' of undefined
What is wrong here?
I have looked at all similar questions and none are working for me. I have a node js app in which I cannot print the input text from a form, using body-parser.
My index.ejs:
<form id="demo-2" method = "POST" action="/search">
<input type="search" name = "searcher" placeholder="Search">
</form>
Index.js:
var cool = require('cool-ascii-faces');
var express = require('express');
var app = express();
var pg = require('pg');
var bodyParser = require('body-parser');
var env = require('node-env-file');
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/views/'));
// views is directory for all template files
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
//app.use(express.bodyParser());
//DIFFERENT APPS - tells them what to do
app.post('/search', function(request, response) {
//var username = req.body;
console.log("posted something"+ request.body.searcher);
response.end("something was posted: "+ request.body.searcher);
});
app.get('/search', function(request, response) {
response.send("skylarr");
});
And despite using the input's name searcher I get error: TypeError: Cannot read property 'searcher' of undefined
What is wrong here?
Share Improve this question edited Mar 26, 2019 at 19:21 ivanleoncz 10k7 gold badges61 silver badges50 bronze badges asked Jun 14, 2017 at 20:19 blueblue 7,37516 gold badges90 silver badges197 bronze badges 2- 1 you comment out body-parser middle ware. why? un comment that and then try. – Khurram Commented Jun 14, 2017 at 20:32
- That created an error regarding middleware and wouldn't let the app run. – blue Commented Jun 14, 2017 at 22:50
4 Answers
Reset to default 10body-parser
is not the part of express. Install it separately using npm install body-parser --save
and then use it as middleware. check the code after line where you commented express.bodyParser()
middleware
var cool = require('cool-ascii-faces');
var express = require('express');
var app = express();
var pg = require('pg');
var bodyParser = require('body-parser');
var env = require('node-env-file');
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/views/'));
// views is directory for all template files
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
//app.use(express.bodyParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
//DIFFERENT APPS - tells them what to do
app.post('/search', function(request, response) {
//var username = req.body;
console.log("posted something"+ request.body.searcher);
response.end("something was posted: "+ request.body.searcher);
});
app.get('/search', function(request, response) {
response.send("skylarr");
});
You are missing the body parser. You need to tell express to use the body parser as a middleware.
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
Add these two lines above the app.post().
There is no body
property on a standard Node.JS HTTP request. That key is patched on by the bodyParser
middleware.
You can either add the bodyParser
middleware, or (if you don't want to parse the body for some reason) use query or URL parameters to pass searcher
.
Instead of bodyparser you could use app.use(express.json())
.