TypeError: cannot read property of undefined (ExpressJS/POST)
Solution 1
body-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");
});
Solution 2
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
.
Solution 3
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().
blue
Updated on June 25, 2022Comments
-
blue almost 2 years
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?
-
blue almost 7 yearsSorry I'm new to this. Can you give an example of those 2 options?
-
Khurram almost 7 years@skyguy you told in above comment if you un comment
bodyParser
that create an error regarding middle ware. I want to tell thatbodyParser
is not the part of express. install and use it separately. -
KylianMbappe almost 4 yearsDoesn't work for me, still displaying the exact same error