使用快速js和body解析器从表单获取用户输入

时间:2017-01-17 15:28:29

标签: node.js forms body-parser

我在从表单获取用户输入时遇到问题。 你能告诉我哪里出错吗?

这里是add-employee.html代码

<!DOCTYPE HTML>
<html>
<head>
    <title>Add Employee</title>
    <!--<script type="text/javascript" src="main.js"></script> -->
    <link rel="stylesheet" href="style.css">
</head>
<body>
<table>
<form action="/form"  method="post">
<tr>
<th>
<label>Name:</label>
<input type="text" name="name">
</th>
<th>
<label>Designation:</label>
<input type="text" name="designation">
</th>
<th>
<label>PAN No:</label>
<input type="text" name="pan">
</th>
<th>
<label>Aadhar No:</label>
<input type="text" name="aadhar">
</th>
<th>
<label>Bank A/c:</label>
<input type="text" name="bank">
</th>
<th>
<label>Basic Salary:</label>
<input type="text" name="basicsalary">
</th>
<th>
<label>Other Allowance:</label>
<input type="text" name="allowance">
</th>
<th>
<label>ESI No:</label>
<input type="text" name="esi">
</th>
<th>
<label>UAN No:</label>
<input type="text" name="uan">
</th>
</tr>

<tr>
<td>
<input type="submit" name="submit_button">
</td>
</tr>
</form>
</table>


</body>


</html>

这里是我用来运行应用程序的server.js代码的链接。 https://github.com/silentarrowz/payroll/blob/master/server.js 当我提交表格时,我希望得到回复 &#39;雇员&#39; +名称+&#39;已添加&#39;

但我得到的结果为&#34;员工未定义添加&#34;。

现在,为什么会这样? 我哪里错了?

1 个答案:

答案 0 :(得分:1)

在你的server.js中你有这条线。

app.use(bodyParser.json());

这意味着您的服务器只能读取请求中的JSON数据。但是,除非您使用javascript / jquery将表单发送到服务器,否则数据永远不会格式化为JSON。相反,浏览器使用urlencoded或multipart格式发送表单。 multipart通常仅在您使用表单发送文件时使用,因此很可能使用urlencoded格式。

这意味着您需要为urlencoded格式包含一个正文解析器。

只需更改它,以便我们在json解析器下面有urlencoded解析器,如下所示:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

但是,如果您要使用表单发送文件,则必须使用multiparty等模块解析请求。