Node配合Express框架获取参数主要有以下4种形式:
- req.body
- req.params
- req.param()
- req.query
那么,以上几种形式获取参数的值适用于什么情景呢?这4种获取参数值的方式各有什么区别和联系呢?
适用情景案例
req.body
req.body在官方文档是没有提供的,但是它也是很好用的获取表单参数的方法。req.body是配合Express中间件bodyParser()中间件提供的。当bodyParser()中间件使用后,这个对象默认为 {},req.body可以获取到post到body中的内容。
举个栗子:
app.post('/user/signup',function(req,res){
var _user = req.body.user;
})
// POST user[name]=tobi&user[email]=tobi@learnboost.com req.body.user.name // => "tobi" req.body.user.email // => "tobi@learnboost.com" // POST { "name": "tobi" } req.body.name // => "tobi"
req.params
这是一个数组对象,命名过的参数会以键值对的形式存放。 比如你有一个路由/user/:name, name属性会存放在req.params.name. 这个对象默认为 {}.
举个栗子:
// GET /user/tj req.params.name // => "tj" app.post('/user/signup/:userid',function(req,res){ req.params.userid; })
当使用正则表达式定义路由的时候,req.params[N]会是这个应用这个正则后的捕获分组, N是代表的是第N个捕获分组。这个规则同样适用于全匹配的路由,如 /file/*
// GET /file/javascripts/jquery.js req.params[0] // => "javascripts/jquery.js"
req.param(name)
req.param()是req.query、req.body、以及req.params获取参数的三种方式的封装。req.param(name)返回name参数的值。
举个栗子:
和上面的req.body方法类似
// POST name=tobi app.post('/user?name=tobi',function(req,res){ req.param('name'); // => "tobi" }) // ?name=tobi req.param('name') // => "tobi" // /user/tobi for /user/:name req.param('name') // => "tobi"
req.query
这是一个解析过的请求参数对象,默认为{}.
举个栗子:
// GET /search?q=tobi+ferret req.query.q // => "tobi ferret" // GET /shoes?order=desc&shoe[color]=blue&shoe[type]=converse req.query.order // => "desc" req.query.shoe.color // => "blue" req.query.shoe.type // => "converse"
区别与联系
总结出以下4点:
1、对于path中的变量,均可以使用req.params.xxxxx方法
2、对于get请求的?xxxx=,使用req.query.xxxxx方法
3、对于post请求中的变量,使用req.body.xxxxx方法
4、以上三种情形,均可以使用req.param()方法,所以说req.param()是req.query、req.body、以及req.params获取参数的三种方式的封装。
浙公网安备 33010602011771号