nodejs的express框架为我们提供了四种方法来实现获取请求中的参数:
1.req.body
2.req.query
3.req.params
4.req.param()
1.req.body
通常用来解析POST请求中的数据
req.body不是nodejs默认提供的,需要载入中间件body-parser中间件才可以使用req.body
例如前台代码:
//jade模板
#signupModal.modal.fade
.modal-dialog
.modal-content
form(method="POST",action="/user/signup")
.modal-header 注册
.modal-body
.form-group
label(for="signupName") 用户名
input#signupName.form-control(name="user[name]",type="text")
.form-group
label(for="signupPassword") 密码
input#signupPassword.form-control(name="user[password]",type="password")
.modal-footer
button.btn.btn-default(type="button",data-dismiss="modal") 关闭
button.btn.btn-success(type="submit") 提交
后台代码:
var bodyParser = require('body-parser');
app.post('/user/signup',function (req,res) {
var _user = req.body.user;
})
req.query
是由nodejs默认提供,无需载入中间件,此方法多适用于GET请求,解析GET请求中的参数
包含在路由中每个查询字符串参数属性的对象,如果没有则为{}
举例:
// GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse
req.query.order
// => "desc"
req.query.shoe.color
// => "blue"
req.query.shoe.type
// => "converse"
req.params
包含映射到指定的路线“参数”属性的对象
例如,如果你有route/user/:name,那么“name”属性可作为req.params.name。
nodejs默认提供,无需载入其他中间件
post和get方式提交的表单的参数的获取,都可用req.params获取,但是需要注意的是:
假设现在我们以Post方式提交表单,在后台我们要获取到userid这个参数
我们提交的路径是/user/signup?1111userid=1122
这时如果我们通过req.params.userid获取到的并不是post表单提交上来的参数,这时因为req.params包含映射到指定的路线“参数”属性的对象,所以它在解析参数的时候包含URL中的路由,它获取的顺序是:
1.url中路由参数
2.post请求中提交参数
3.get请求中的参数
这里获取到的是1111,
如果提交的路径为:/user/signup?userid=1122
req.params.userid获取到的就是post提交的参数
req.param()
此方法被弃用,请看官方解释
Deprecated. Use either req.params, req.body or req.query, as applicable.
翻译:被弃用,用其他三种方式替换