Express4.x常用API(二):Request
这是第二篇了,打算每天都拿些时间去详细的看看文档来自学下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"
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对象的大部分属性和方法了.
Express4.x常用API(二):Request的更多相关文章
- Express4.x常用API(一):res
最近在学习NodeJS,用到了express,看着官网上的API手册,打算把其中比较常用到的API根据自己理解翻译一下,方便自己学习使用. 该篇打算用来记录下express中res. 由于水平有限,希 ...
- Java学习随笔---常用API(二)
Object类的toString方法 将一个对象返回为字符串形式,但一般使用的时候会覆盖重写toString方法 Object类是所有类的父亲 // public class Person { pri ...
- Java(23)常用API二
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15228415.html 博客主页:https://www.cnblogs.com/testero ...
- Express4.x API (二):Request (译)
写在前面 最近学习express想要系统的过一遍API,www.expressjs.com是express英文官网(进入www.epxressjs.com.cn发现也是只有前几句话是中文呀~~),所以 ...
- request对象常用API 获取请求参数的值 request应用 MVC设计模式
1 request对象常用API 1)表示web浏览器向web服务端的请求 2)url表示访问web应用的完整路径:http://localhost:8080/day06/Demo1 ...
- Servlet 常用API学习(二)
Servlet常用API学习 一.HTTP简介 WEB浏览器与WEB服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP协议. HTTP是 hypertext transfer pr ...
- 【OpenGL游戏开发之二】OpenGL常用API
OpenGL常用API 开发基于OpenGL的应用程序,必须先了解OpenGL的库函数.它采用C语言风格,提供大量的函数来进行图形的处理和显示.OpenGL库函数的命名方式非常有规律.所有OpenGL ...
- Netty的常用API(二)
在使用Netty之前先介绍下Netty的常用API,对其有一个大概的了解. 一.EventLoop和EventLoopGroup EventLoop如同它的名字,它是一个无限循环(Loop),在循环中 ...
- Java 常用API(二)
目录 Java 常用API(二) 1. Object类 2. Date类 概述 构造方法和成员方法 3. DateFormat类 概述 SimpleDateFormat类 练习 4. Calendar ...
随机推荐
- M1/M2个人总结
软件工程整个学期结束了,很开心学了这门课,在学到知识的同时也提高了自己的动手实践的能力,感觉自己在整个软件工程的各个环节中都能有所把握,可以将学到的知识运用到设计.实践更多的项目中去. M1阶段个人总 ...
- Oracle存储过程例子:运用了正则表达式、数组等
代码 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-- ...
- VMware下利用ubuntu13.04建立嵌入式开发环境之二
之前在VMware中安装完Ubuntu系统,接下来开始设置开发中用到的服务和工具,以及系统设计. 1.安装VMware工具:打开VMware软件,在菜单->VM->Install VMwa ...
- Promise与Defer认识
1.deffer对象:jquery的回掉函数解决方案:含义是延迟到未来某个点再执行: 2.$.ajax链式写法: $.ajax("test.php") .done(func ...
- 招聘信息:无线产品研发总监 60-100W
招聘信息:某知名电商公司诚招: 无线产品研发总监 60-100W 招聘人数:1名 岗位描述: 熟悉互联网产品业务流程,完成产品功能的概念设计个原型展示: 进行市场调查和分析,相关用户研究和信息整理,提 ...
- protobuf简介和使用
1.Protocol Buffers简介 Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据 ...
- TcpListener的异步调用内存泄漏---最近测试结果,没有泄露
我后来加大了client的连接/断开的次数(500,1000),Server端的连接被释放了. 这说明: 1. 此代码是 可以正常工作的. 2.TcpListener/TcpListener的asyn ...
- 什么是web service
一.序言 大家或多或少都听过WebService(Web服务),有一段时间很多计算机期刊.书籍和网站都大肆的提及和宣传WebService技术,其中不乏很多吹嘘和做广告的成分.但是不得不承认的是Web ...
- 【Python】二分查找算法
二分查找:在一段数字内,找到中间值,判断要找的值和中间值大小的比较.如果中间值大一些,则在中间值的左侧区域继续按照上述方式查找.如果中间值小一些,则在中间值的右侧区域继续按照上述方式查找.直到找到我们 ...
- google vr开源 cardboard
https://developers.google.com/cardboard/android/ 待续