热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Express4.x常用API(二):Request

这是第二篇了,打算每天都拿些时间去详细的看看文档来自学下express吧,接下来就开始了,这次依然是有选择性的找API根据自己的理解翻译过来,方便日后开发时候的自己查阅,由于水平有限,大概也会在使用过

这是第二篇了,打算每天都拿些时间去详细的看看文档来自学下express吧,接下来就开始了,这次依然是有选择性的找API根据自己的理解翻译过来,方便日后开发时候的自己查阅,由于水平有限,大概也会在使用过程中更新下各个API的坑,事不宜迟,开始吧

  • Properties
  • req.app
  • req.baseUrl
  • req.body
  • req.COOKIEs
  • req.fresh
  • req.hostname
  • req.ip
  • req.ips
  • req.originalUrl
  • req.params
  • req.path
  • req.protocol
  • req.query
  • req.route
  • req.signedCOOKIEs
  • req.stale
  • req.subdomains
  • req.xhr
  • Methods
  • req.accepts()
  • req.acceptsCharsets()
  • req.acceptsEncodings()
  • req.acceptsLanguages()
  • req.get()
  • req.is()
  • req.param()

 

从目录看我们很明显可以看出Request的属性是明显多于Response的,接下来我们逐项看看吧.

Request,首先它的属性是来自HTTP请求查询字符串,参数,实体,头部等等.按照惯例来说,Request通常被简称req,但是和Response一样,实际名字还是我们说了算的,在回调函数中你想怎么样就怎么样.

app.get('/user/:id', function(req, res){//req,随你怎么改对吧
res.send('user ' + req.params.id);
});
//改变之后
app.get('/user/:id',function(whatEver,res){//都一样,记住调用时候你传入参数是怎样就好
res.send('user ' + whatEver.params.id);
});

其实两个函数都是一样的.

接下来我们好好看看属性

Properties

   req.app:res和req都有这个属性,功能上都是一样的,都是用于保存到底是哪个express实例在使用这个中间件.

   req.baseUrl:返回路由实例挂载的的URL path,其实就是你app.use('',route);时第一个参数的值,如果是匹配多项的正则或数组,则会返回匹配成功时的path.

官网注释:req.baseUrl和app.mountpath相同,但是app.mountpath返回的是匹配字符串参数.举个栗子比较好吧

app.use('/gre+t',route); //<-访问/greet时,baseUrl()返回的将会是/greet,而mountpaht将会返回/gre+t

  req.body:包含一对在请求主体中的键值对数据,默认为undefined.这常常用在你使用body-parsing中间件的时候,比如body-parser(用于解析客户端请求body的内容)和multer(处理http提交multipart/form-data,可以用于上传文件).

    req.COOKIEs:当使用COOKIE-parser中间件时,这属性是一个对象,如果请求没包含任何COOKIE则默认为{}

  req.fresh与req.stale:两个是相对的属性.用于判断请求是不是新的,通过Last-Modified或者ETag进行匹配,表明资源是不是新的.如果是新的则fresh为true.

  req.hostname:包含HTTP头部的Host属性

  req.ip:返回远程地址,如果信任代理开启了的话,返回上一级的IP地址.

  req.ips:当信任代理设置为true,这个属性包含一个由请求头部中"X-Forwarded-For"里的IP组成的数组.有些情况下为空数组.(信任代理trust poxy通过app.set()设置)

  req.originalUrl:这个属性很像req.url,但是这个属性维持req.url的初始值,你则能自由的修改req.url.

  req.params:是一个数组对象,命名的参数会以键值对的形式存放,1:如路由中/user/:name;则req.params.name就会存放path中name对应的字串.2:如使用正则表达式定义路由,req.params则是正则中匹配的字串,如/user/ff*/fff*路由,path为/user/ffd/fffccc时,req.params = {"0":"d","1":"ccc"};

  req.path:包含请求URL的path部分.

  req.protocol:就是请求的协议啦,如HTTP或者HTTPS

  req.query:一个对象用来保存路由中附带的参数,如/shoes?order=desc&shoe[color]=blue;则req.query.order=desc,req.query.shoe.color=blue;

  req.route:返回匹配路由信息.

  req.signedCOOKIEs:当使用了COOKIE-parser中间件后,这个属性将被默认创建为{}并等待使用,否则包含了用户代理传回来的签名后的COOKIE并等待使用.因为req.COOKIE是容易被恶意攻击者替换,需要注意的是,这种签名的COOKIE不是代表它是隐藏或者加密的,而只是简单的阻止了篡改COOKIE,相当于一种预防篡改的手段.

  req.subdomains:看sub-domain,这些单词也是可以简单看出是获取请求子域名的属性,如Host:tobi.fff.example.com=>req.subdomains=>["fff","tobi"];

  req.xhr:判断请求的"X-Requested-With"是否为"XMLHttpRequest",是则返回true.

Methods

  req.accepts(types)

    该方法用于检查请求的指定内容类型,基于HTTP请求的头部,返回最匹配的类型.如果没有可接受的指定内容类型,将会返回undefined(这种情况下,应该返回406状态码"Not Acceptable");
    type值应该是简单MIME类型字串(如"application/json"),文件扩展名如json,也可以传入一个数组,则方法返回最匹配的一个.

// Accept: text/html
req.accepts('html');
// => "html"

// Accept: text/*, application/json
req.accepts('html');
// => "html"
req.accepts('text/html');
// => "text/html"
req.accepts('json, text');
// => "json"
req.accepts('application/json');
// => "application/json"

// Accept: text/*, application/json
req.accepts('image/png');
req.accepts(
'png');
// => undefined

// Accept: text/*;q=.5, application/json
req.accepts(['html', 'json']);
req.accepts(
'html, json');
// => "json"
View Code

  req.acceptsCharsets(charset[,...])

    检查传入字符集中有无字符集可用,基于请求头部Accep-Charset字段,如果没有可用字符集,返回 false,可用则返回可用字符集.

  req.acceptsEncoding(encoding[,...])

    检查传入的编码方式中是否有有效的,基于请求头部Accept-Encoding字段,如果没有则返回false,可用则返回可用的编码方式.

  req.acceptsLanguages(lang[,...])

    恩,和上面两个都是同一个意思.基于Accept-Language字段.

  req.get(field)

    可以说我们最简单的获取信息的方法了!返回HTTP请求头部字段中相应的字段值,值得注意的是,它是大小写不敏感的.Referrer和Referer是可以互换的

  req.is(type)

    如果请求头部中Content-Type字段值和传入type相同则返回true.否则返回false.

  req.param(name[,defaultValue])

    返回出现的参数名为name的值.查找将按照下列顺序进行

      • req.params
      • req.body
      • req.query

以上~就是Request对象的大部分属性和方法了.


推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • WebSocket与Socket.io的理解
    WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 本文讨论了如何在codeigniter中识别来自angularjs的请求,并提供了两种方法的代码示例。作者尝试了$this->input->is_ajax_request()和自定义函数is_ajax(),但都没有成功。最后,作者展示了一个ajax请求的示例代码。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
author-avatar
mobiledu2502880517
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有