这是我的简单表单:

<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调用时,它可以工作,所以。任何想法?


当前回答

特快4用户注意事项:

如果你试着把app.use(express.bodyParser());进入你的应用程序,你会得到以下错误当你试图启动你的Express服务器:

错误:大多数中间件(如bodyParser)不再与Express捆绑,必须单独安装。请参见https://github.com/senchalabs/connect#middleware。

你必须从npm中单独安装包体解析器,然后使用如下代码(示例取自GitHub页面):

var express    = require('express');
var bodyParser = require('body-parser');

var app = express();

app.use(bodyParser());

app.use(function (req, res, next) {
  console.log(req.body) // populated!
  next();
})

其他回答

使用express.bodyParser()的安全问题

虽然目前所有其他答案都建议使用express.bodyParser()中间件,但这实际上是express.json()、express.urlencoded()和express.multipart()中间件(http://expressjs.com/api.html#bodyParser)的包装器。表单请求体的解析由express.urlencoded()中间件完成,这是在req时公开表单数据所需要的全部内容。体对象。

由于express.multipart()/connect.multipart()如何为所有上传的文件创建临时文件(并且不会被垃圾收集)存在安全问题,现在建议不要使用express.bodyParser()包装器,而是只使用所需的中间件。

注意:Connect . bodyparser()将很快更新到只包括urlencoded和json当Connect 3.0发布(Express扩展)。


所以简而言之,与其…

app.use(express.bodyParser());

...你应该使用

app.use(express.urlencoded());
app.use(express.json());      // if needed

如果/当你需要处理多部分表单(文件上传)时,使用第三方库或中间件,如multiparty、busboy、dicer等。

Post参数可通过以下方式检索:

app.post('/api/v1/test',Testfunction);
http.createServer(app).listen(port, function(){
    console.log("Express server listening on port " + port)
});

function Testfunction(request,response,next) {
   console.log(request.param("val1"));
   response.send('HI');
}

使用express-fileupload包:

var app = require('express')();
var http = require('http').Server(app);
const fileUpload = require('express-fileupload')

app.use(fileUpload());

app.post('/', function(req, res) {
  var email = req.body.email;
  res.send('<h1>Email :</h1> '+email);
});

http.listen(3000, function(){
  console.log('Running Port:3000');
});

请求流对我有用

req.on('end', function() {
    var paramstring = postdata.split("&");
});

var postdata = "";
req.on('data', function(postdataChunk){
    postdata += postdataChunk;
});

表达v4.17.0

app.use(express.urlencoded( {extended: true} ))

app.post('/userlogin', (req, res) => {    

   console.log(req.body) // object

   var email = req.body.email;

}

express.urlencoded

演示的形式

另一个答案