这是我的简单表单:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
这是我的Express.js/Node.js代码:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
我试过sReq。query。email或sReq。查询['email']或sReq。params['邮件'],等等。没有一个有用。它们都返回undefined。
当我更改为Get调用时,它可以工作,所以。任何想法?
针对Express 4.4.1进行更新
从Express中删除了以下中间件。
身体解析器
杰森
乌伦编码
多部件
当您像在express 3.0中那样直接使用中间件时。你会得到以下错误:
Error: Most middleware (like urlencoded) is no longer bundled with Express and
must be installed separately.
为了利用这些中间件,现在你需要分别为每个中间件做npm。
由于bodyParser被标记为已弃用,所以我推荐以下使用json, urlencode和多部分解析器的方式,如强大的,connect-multiparty。(多部分中间件也已弃用)。
还要记住,只是定义urlencode + json,表单数据不会被解析和请求。Body将未定义。您需要定义一个中间件来处理多部分请求。
var urlencode = require('urlencode');
var json = require('json-middleware');
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.use(json);
app.use(urlencode);
app.use('/url/that/accepts/form-data', multipartMiddleware);
后端:
import express from 'express';
import bodyParser from 'body-parser';
const app = express();
app.use(bodyParser.json()); // add a middleware (so that express can parse request.body's json)
app.post('/api/courses', (request, response) => {
response.json(request.body);
});
前端:
fetch("/api/courses", {
method: 'POST',
body: JSON.stringify({ hi: 'hello' }), // convert Js object to a string
headers: new Headers({ "Content-Type": "application/json" }) // add headers
});
给定某种形式:
<form action='/somepath' method='post'>
<input type='text' name='name'></input>
</form>
使用快递
app.post('/somepath', function(req, res) {
console.log(JSON.stringify(req.body));
console.log('req.body.name', req.body['name']);
});
输出:
{"name":"x","description":"x"}
req.param.name x
适用于Express 4.1及以上版本
因为大多数答案都是使用Express, bodyParser, connect;其中不建议使用多部分。有一种安全的方法可以轻松地发送post多部分对象。
Multer可以用来代替connect.multipart()。
安装包
$ npm install multer
在你的应用中加载它:
var multer = require('multer');
然后,将它与其他表单解析中间件一起添加到中间件堆栈中。
app.use(express.json());
app.use(express.urlencoded());
app.use(multer({ dest: './uploads/' }));
Connect.json()处理application/json
Connect.urlencoded()处理application/x-www-form-urlencoded
multer()处理多部分/表单数据