如何检索POST查询参数?

这是我的简单表格:

<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.emailsReq.query['email']sReq.params['email'],等等。它们都不起作用。他们都回来了undefined

当我更改为Get呼叫时,它可以工作,所以..有什么想法吗?

JimJim2020/03/11 11:16:47

您不应该使用app.use(express.bodyParser())BodyParser是json + urlencoded + mulitpart的并集。您不应该使用此功能,因为在connect 3.0中将删除多部分。

要解决此问题,您可以执行以下操作:

app.use(express.json());
app.use(express.urlencoded());

知道应该在json和urlencode之后使用app.use(app.router),这是非常重要的,否则它将不起作用!

SamEva2020/03/11 11:16:46

如果您要构建不带中间件的发布查询,则将执行此操作:

app.post("/register/",function(req,res){
    var bodyStr = '';
    req.on("data",function(chunk){
        bodyStr += chunk.toString();
    });
    req.on("end",function(){
        res.send(bodyStr);
    });

});

这会将其发送到浏览器

email=emailval&password1=pass1val&password2=pass2val

尽管使用中间件可能更好,但是您不必在每条路线中都一遍又一遍地编写。

逆天宝儿米亚2020/03/11 11:16:46
app.use(express.bodyParser());

然后,app.post如果需要您可以通过获取帖子值req.body.{post request variable}

西门乐2020/03/11 11:16:46

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

而所有其他的答案目前推荐使用的express.bodyParser()中间件,这其实是围绕着一个包装express.json()express.urlencoded()express.multipart()中间件(http://expressjs.com/api.html#bodyParser)。表单请求主体的解析由express.urlencoded()中间件完成,而这是将req.body对象上的表单数据公开所需要的全部

由于出于安全考虑,如何express.multipart()/ connect.multipart()为所有上载的文件创建临时文件(并且不会进行垃圾回收),因此建议不要使用express.bodyParser()包装器,而应仅使用所需的中间件。

注:connect.bodyParser()即将更新到只包含urlencodedjson当连接3.0被释放(其表达延伸)。


简而言之,而不是...

app.use(express.bodyParser());

...您应该使用

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

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