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 ...
随机推荐
- 一个无聊的python + opencv 示例
opencv不用多说,先推荐一个给力的教程: https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_tutor ...
- HalconMFC(一)之多版本配置
今天比较匆忙,还得写周六日考试扯P的PPT,就先这样开个头吧.我的电脑是win7,32位的系统,我用Halcon10.0.但是很多小伙伴的都是64位系统的,所以我用小伙伴的64位系统试过很多次用VC配 ...
- React之Composition Vs inheritance 组合Vs继承
React的组合 composition: props有个特殊属性,children,组件可以通过props.children拿到所有包含在内的子元素, 当组件内有子元素时,组件属性上的child ...
- spring通过静态方法获得properties文件的值
获得spring bean方法 @Component public class BeanUtils implements ApplicationContextAware { private stati ...
- CSS 透明度 设置 兼容IE FF
filter:Alpha(Opacity=80);/*IE*/ -moz-opacity:0.8;/*FF*/ opacity: 0.8;/*所有元素*/ 参数设置说明: Alpha(Opacity= ...
- Yii Uploadify批量上传
控制器: $reinfo = "fail"; $filename=""; //重要说明: //使用uploadify 上传时,每次这个sessionID都会改变 ...
- 关于由CSS2.1所提出的的BFC的理解与样例
今天在这里谈谈css中BFC.“BFC”是Block Formatting Context的缩写,这个概念是由CSS2.1提出来的,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.满 ...
- 我们的html
http://files.cnblogs.com/files/eeroom/mac-Bootstrap.rar http://files.cnblogs.com/files/eeroom/CSharp ...
- C# winform 安装程序打包(自定义操作)
(一),安装程序 以前用vs制作过安装程序,现在把步骤写出来,有帮助的大家一定要顶哦 第一步:建立工程1.打开vs,新建项目->其他项目类型->安装和部署(這個子项下面有安装项目和Web安 ...
- css 水平居中垂直居中的几种方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...