我在视频教程上做某些事情时遇到很多困难,看起来很简单。我已经使用带有虚拟html的express(通过ejs)设置了一个节点应用程序。我试图捕获用户通过输入字段(如搜索栏)输入的数据并尝试验证该节点是否正在捕获该数据。
我有一个带有此表单的ejs文件。
<form action="/input" method="POST" enctype="multipart/form-data">
<div class="input-group">
<input type="text" class="form-control" name="id" placeholder="Enter the id of the product you would like to buy">
<div class="input-group-append">
<button class="btn btn-outline-secondary" name="submit" type="submit"><i class="fas fa-cart-plus mr-2"></i>Add to Cart</button>
</div>
</div>
</form>
在我的app.js文件中,按以下顺序,我:
var express = require('express');
var bodyParser = require('body-parser');
// setting up views
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'public')));
// middleware for bodyParser
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
// render page
app.get('/input', function(req, res){
res.render('input');
});
// get input from text input
app.post('/input', function(req, res) {
console.log(req.body.id);
})
运行它会返回&#34; undefined&#34;。我已经尝试将req.body.id换成req.body,它在控制台中返回一个空对象{}。任何帮助,将不胜感激。我不确定我错过了什么。
答案 0 :(得分:0)
为自己承担节点服务器实例的世界感到自豪!大多数情况下,您遇到的问题是Express特定的。最初配置Express时声明任何内容的顺序非常严格。尝试移动身份解析器中间件设置下方的视图配置。我设置了数百个Express应用程序,我的常规goto第一个配置总是:
app.disable('x-powered-by')
app.disable('etag')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.use(cookieParser())
app.use(compress())
app.use(methodOverride())
app.use(helmet())
app.use(cors())
在我为模板框架进行任何注册之前。