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 ...
- 原生js实现放大镜效果
今天做任务的时候,有一个任务就是让实现电商网站常用的放大镜效果,类似于这样的效果,之前并没有做过这种放大镜效果,刚开始的思路是对图片进行裁剪,但是后来发现实在是难以实现,于是求助了万能的谷歌,发现一个 ...
- hypermesh2flac3d
hypermesh2ansys2flac3d 目的: 将hypermesh中划分的网格输出到flac3d中.过程是hypermesh12.0-ansys13.0-flac3d3.0. 视频教程详见:h ...
- 使linux服务器默认使用中文字符集zh_CN.UTF-8
一.问题描述和相关概念 linux服务器的字符集设置可能影响到网站页面出现 “???” 等问号乱码,还有可能导致文件中的汉字部分出现乱码. locales设置:语言设置选项 linux真的是一个非 ...
- Win7 64位ORACLE取数字乱码的解决
参见网址http://www.2cto.com/database/201304/201767.html 首先是PLSQL DEVELOPER 直接报错 NLS_LANG 错误 第一步是在命令行下测试 ...
- html基础01
一.HTML 基础 1.HTML基础标签:<head> <bady> <tittle>XXX<tittle>:为标签 2.HTML标题 <h1&g ...
- 将IIS6.0中的某页设置成首页
- 如何注册OCX控件
32位系统: 将文件放到c:\windows\system目录 注册 运行:Regsvr32 c:\windows\system\xxx.ocx 取消注册运行:Regsvr32.exe /u c:\w ...
- Oracel查询根据部分字段去重复
一般一个表的id是唯一的,如果除去id则会有重复数据,有时做项目时查询要求根据某几个字段去掉重复记录,并且查询保留id 以下是Oracel查询时根据部分字段去重复,例如,查询的字段包括id,Sys,C ...
- httpclient学习
httpclient入门: http://www.ibm.com/developerworks/cn/opensource/os-httpclient/ httpclient证书导入:http: ...