//app.js var express = require('express'); var app = express(); app.use(function(req, res, next){ if(req.url == 'https://www.jb51.net/'){ res.end('<h1>Express</h1>'); }else{ next(); } }); app.use(function(req, res, next){ if(req.url == '/demo'){ res.end('<h1>Demo</h1>'); }else{ next(); } }); app.use(function(req, res, next){ res.end('<h1>404<h1>'); }); app.listen(3000);
请求与响应
上面express中每一个回调函数都不可缺少req和res参数
重要性可见一斑
常见的req与res中的属性/方法如下(原生node.js的req、res属性/方法也可以使用)
Request对象:
API
含义
req.app
当callback为外部文件时,用于访问express的实例
req.baseUrl
获取路由当前安装的URL路径
req.body/cookies
获得「请求主体」/ Cookies
req.fresh/stale
判断请求是否还「新鲜」
req.hostname/ip
获取主机名和IP地址
req.originalUrl
获取原始请求URL
req.params
获取路由的parameters
req.path
获取请求路径
req.protocol
获取协议类型
req.query
获取URL的查询参数串
req.route
获取当前匹配的路由
req.subdomains
获取子域名
req.acceptsCharsets
返回指定字符集的第一个可接受字符编码
req.acceptsEncodings
返回指定字符集的第一个可接受字符编码
req.acceptsLanguages
返回指定字符集的第一个可接受字符编码
req.accepts()
检查可接受的请求的文档类型
req.get()
获取指定的HTTP请求头
req.is()
判断请求头Content-Type的MIME类型
Response对象:
API
含义
res.app
同req.app
res.append()
追加指定HTTP头
res.set()
在res.append()后将重置之前设置的头
res.cookie()
设置Cookie
res.clearCookie()
清除Cookie
res.download()
传送指定路径的文件
res.get()
返回指定的HTTP头
res.json()
传送JSON响应
res.jsonp()
传送JSONP响应
res.location()
只设置响应的Location HTTP头,不设置状态码或者close response
res.redirect()
设置响应的Location HTTP头,并且设置状态码302
res.send()
传送HTTP响应
res.sendFile()
传送指定路径的文件 -会自动根据文件extension设定Content-Type
res.set()
设置HTTP头,传入object可以一次设置多个头
res.status()
设置HTTP状态码
res.type()
设置Content-Type的MIME类型
挑一些重点
req.query
req.query可以获取请求路径参数的对象
向服务器发送请求 :3000/?user=tester&pass[a]=123&pass[b]=456
//app.js var express = require('express'); var app = express(); app.get('https://www.jb51.net/', function(req, res, next){ console.log(req.query); console.log(req.query.user); //tester console.log(req.query.pass.a); //123 console.log(req.query.pass.b); //456 res.end(); }); app.listen(3000);
req.params
req.params可以解析复杂路由规则上的属性
(req.param综合了req.query和req.param的功能,但是被移除了不要使用)
向服务器发送请求 :3000/123456