express中req请求,取参数的三种方法 req.params req.query req.body区别

基本使用
const request = require(‘request’)
引入这个包就可以开始使用了,最简单的使用方式就是 request(url) 就可以想指定的地址发起一个 get 请求。
从这里我们可以看出 request 暴露出来的就是一个函数。其实它内部的结构如下
function request (uri, options, callback) {
if (typeof uri === ‘undefined’) {
throw new Error(‘undefined is not a valid uri or options object.’)
}

var params = initParams(uri, options, callback)

if (params.method === ‘HEAD’ && paramsHaveRequestBody(params)) {
throw new Error(‘HTTP HEAD requests MUST NOT include a request body.’)
}

return new request.Request(params)
}
可以看出它默认接收三个函数,并且第一个参数值必须存在,request的传参方式也有很多种,本身做了很多支持的处理,来看看它支持的传参数方式。
入参格式
url 必填,可以单独放在第一个参数,或者作为 option 的属性之一。其他都是可选。
// 方式一
request(url,options,callback)
// 方式二
let options = {
url // 必填
}
request(options,callback)
简写方式
// 方式一
request.get(url,options,callback)
// 方式二
let options = {
url // 必填
}
request.get(options,callback)

// 方式一
request.post(url,options,callback)
// 方式二
let options = {
url
}
request.post(options,callback)
复制代码为啥 request 支持这么多种传参数方式。来看看它内部的实现方式
源码
下面代码可以看出,request 对参数类型进行类型判断来采用不同的合并方式,最终 return 的params要求就是要包含url请求地址。
function initParams (uri, options, callback) {
// 处理没有传 options 的情况
if (typeof options === ‘function’) {
callback = options
}
var params = {}
if (typeof options === ‘object’) {
extend(params, options, {uri: uri})
// 传递的 url 最终也会被合并到 pramas 上
// 并且如果你在 options 传递了 uri 会被第一参数覆盖,优先级以 第一个入参uri为准
} else if (typeof uri === ‘string’) {
extend(params, {uri: uri})
} else {
// 处理第一参数不是url的情况
extend(params, uri)
}

params.callback = callback || params.callback
return params
}

request(options,callback) 提供 baseUrl 来统一设置域名部分及公共部分。

// 定义了 baseUrl 后只需要传递接口 api 即可
function fetchPost(path,params){
  return new Promise( (resolve,reject)=>{
    request.post(path,{
      baseUrl:"http://localhost:9000/react/",
    },function(err, httpResponse, body){
      if(err){
        reject(err)
      }else{
        resolve(body)
      }
    })
  })
}
// 使用,只传递了接口部分最终会拼接成 
http://localhost:9000/react/c-request
router.get('/c-request',async ctx=>{
  let res = await fetchPost('request-header',{value:1,name:'dd'})
  ctx.body = res
})

req.params req.query req.body
其中req.params,req.query是用在get请求当中。
用req.params 解析下面网址
http://localhost:3000/10
app.get("/:id",function (req,res) {
res.send(req.params[“id”]);
});
得到/后面的内容10
用req.query 解析下面网址
http://localhost:3000/?id=10
app.get("/",function (req,res) {
res.send(req.query[“id”]);
});
得到的是?后id的值 10
req.body
body不是nodejs默认提供的,你需要载入body-parser中间件才可以使用req.body;
此方法通常用来解析POST请求中的数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值