node.js - 表单发布使 req.body.[输入名称] 未定义
问题描述
我查看了我的代码,但似乎找不到问题。当我提交表单时,我希望表单发布到同一页面“/admin”。为了测试这一点,我让 app.post("/admin",...) console.log 来自表单输入的相应 req.body 值。但是,表单的每个输入的每个 console.log 都会产生“未定义”。我似乎找不到问题。
HTML 表单
<form class="col s12" method="post" action="/admin" enctype="multipart/form-data">
<div class="row">
<div class="input-field col s12">
<input name="eventname" id="event_name" type="text" class="validate">
<label for="event_name">Event Name</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input name="location" id="location" type="text" class="validate">
<label for="location">Location</label>
</div>
</div>
<div class="row">
<div class="input-field col s12 m6">
<input name="date" type="date" id="createdate" class="validate">
<label for="createdate">Date</label>
</div>
<div class="input-field col s6 m3">
<input name="starttime" id="createstart" type="text" class="validate timepicker">
<label for="createstart">Start Time</label>
</div>
<div class="input-field col s6 m3">
<input name="endtime" id="createend" type="text" class="validate timepicker">
<label for="createend">End Time</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input name="eventleader" id="eventleader" type="text" class="validate">
<label for="eventleader">Event Leader</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input name="eventleadernumber" id="eventleaderno" type="text" class="validate">
<label for="eventleaderno">Event Leader Contact No.</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input name="attendee" id="attendeequota" type="text" class="validate">
<label for="attendeequota">Attendee Quota</label>
</div>
</div>
<div class="row">
<div class="input-field col s12">
<input name="email" id="email" type="email" class="validate">
<label for="email">Email</label>
</div>
</div>
<div class="file-field input-field">
<div class="btn">
<span>File</span>
<input type="file">
</div>
<div class="file-path-wrapper">
<input id="uploadposter" class="file-path validate" type="text">
<label for="uploadposter">Upload Poster Image File</label>
</div>
</div>
<div class="row">
<div class="col s12">
<div class="row">
<div class="input-field col s12">
<textarea name="description" id="eventdescr" class="materialize-textarea"></textarea>
<label for="eventdescr">Event Description</label>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button onclick="submitted()" type="submit" value="Submit" class="modal-close waves-effect waves-green btn-small right">Create Event</button>
</div>
</form>
Express Route(所有console.log都打印出“未定义”)
app.post('/admin', function(req, res) {
console.log(req);
console.log("Event Name:" + req.body.eventname)
console.log("Location:" + req.body.location)
console.log("Date:" + req.body.date)
console.log("StartTime:" + req.body.starttime)
console.log("EndTime:" + req.body.endtime)
console.log("EventLeader:" + req.body.eventleader)
console.log("EventLeaderNumber:" + req.body.eventleadernumber)
console.log("Attendee:" + req.body.attendee)
console.log("Email:" + req.body.email)
console.log("Description:" + req.body.description)
})
解决方案
您在表单中将数据作为 Formdata 传递enctype="multipart/form-data">
鉴于您正在使用body-parser ,删除它可以解决您的问题。
或者
如果您想走这multipart
条路线,请考虑使用multer或busboy之类的模块- 使用 multer 很容易。
使用 multer 编写代码
var express = require('express');
var app = express();
var multer = require('multer');
var upload = multer();
app.post('/admin', upload.none(), function(req, res) {
console.log(req);
console.log("Event Name:" + req.body.eventname)
console.log("Location:" + req.body.location)
console.log("Date:" + req.body.date)
console.log("StartTime:" + req.body.starttime)
console.log("EndTime:" + req.body.endtime)
console.log("EventLeader:" + req.body.eventleader)
console.log("EventLeaderNumber:" + req.body.eventleadernumber)
console.log("Attendee:" + req.body.attendee)
console.log("Email:" + req.body.email)
console.log("Description:" + req.body.description)
});
推荐阅读
- eclipse - 将现有的 python 模块导入新的 eclipse pydev 项目
- json - 远程调用詹金斯作业时发出传递参数
- api - 如何从解析器函数访问字段参数?
- java - Selector.select() 永远阻塞,但 Selector.select(timeout) 立即返回 OP_READ
- pointers - Golang 用 New() 返回结构指针,而不是直接创建一个
- go - go 测试用例没有在主包中运行
- c++ - ffmpeg 对多个函数的未定义引用
- java - SftpChannel.rename 失败,但 mv 命令有效。可能的原因是什么?
- php - 函数类似于 __construct 函数,但用于 LARAVEL 上的特定函数
- clickhouse - 使用当前数据填充 Clickhouse MaterializedView?