这是第二篇了,打算每天都拿些时间去详细的看看文档来自学下express吧,接下来就开始了,这次依然是有选择性的找API根据自己的理解翻译过来,方便日后开发时候的自己查阅,由于水平有限,大概也会在使用过程中更新下各个API的坑,事不宜迟,开始吧
从目录看我们很明显可以看出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的值.查找将按照下列顺序进行
以上~就是Request对象的大部分属性和方法了.