TypeError: cannot read property of undefined (ExpressJS/POST)
TypeError: cannot read property of undefined (ExpressJS/POST)
我查看了所有类似的问题,none 对我有用。我有一个节点 js 应用程序,在其中我无法使用 body-parser 从表单打印输入文本。
我的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");
});
尽管使用输入的名称搜索器,我还是收到错误消息:TypeError: Cannot read property 'searcher' of undefined
这里有什么问题?
标准 Node.JS HTTP 请求中没有 body
属性。该密钥由 bodyParser
中间件修补。
您可以添加 bodyParser
中间件,或者(如果您出于某种原因不想解析正文)使用查询或 URL 参数来传递 searcher
。
您缺少正文解析器。你需要告诉 express 使用主体解析器作为中间件。
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
在 app.post() 上方添加这两行。
body-parser
不是 express 的部分。使用 npm install body-parser --save
单独安装它,然后将其用作中间件。检查您评论 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");
});
我查看了所有类似的问题,none 对我有用。我有一个节点 js 应用程序,在其中我无法使用 body-parser 从表单打印输入文本。
我的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");
});
尽管使用输入的名称搜索器,我还是收到错误消息:TypeError: Cannot read property 'searcher' of undefined
这里有什么问题?
标准 Node.JS HTTP 请求中没有 body
属性。该密钥由 bodyParser
中间件修补。
您可以添加 bodyParser
中间件,或者(如果您出于某种原因不想解析正文)使用查询或 URL 参数来传递 searcher
。
您缺少正文解析器。你需要告诉 express 使用主体解析器作为中间件。
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
在 app.post() 上方添加这两行。
body-parser
不是 express 的部分。使用 npm install body-parser --save
单独安装它,然后将其用作中间件。检查您评论 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");
});