最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - TypeError: cannot read property of undefined (ExpressJSPOST) - Stack Overflow

programmeradmin2浏览0评论

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
Add a comment  | 

4 Answers 4

Reset to default 10

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");

});

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()).

发布评论

评论列表(0)

  1. 暂无评论