Express是基于Node.js的十分优秀的开发框架,本篇将介绍Express的基本用法及规则。
- express 封装了多种 http 请求方式,主要有get和post方法,app.all 可以获取所有请求方式,回调函数有两个参数分别是 req和 res,代表请求信息和响应信息。
get过来的参数: querystring + cookie
post过来的参数: querystring + cookie + formdata + request payload
querystring:
//获取url中的?后面的值,得到对象
执行方式:req.query
params
//处理 /:xxx 形式的 get 请求
执行方式:req.params
cookie:
//获取的是cookie值,处理 get 请求
执行方式::req.cookies
注:cookie要用到 cookie-parser工具
formdata:
//获取到formdata中的信息,处理post请求
执行方式:req.body
request payload:
//获取到request payload的值
执行方式:req.body
req.param()
注: 可以处理 get 和 post 请求,但查找优先级由高到低为req.params→req.body→req.query
例如:
router.get('/get', (req, res, next) => {
console.log(req.querystring)
})
//这时控制台就会得到用户的?后面的信息
在url中输入的地址应该为:http://localhost:3000/get?a=1&b=2
控制台返回的就是:{a:1,b:2}
1.*通配符url
app.get('/test/*',function(req,res){
res.send(req.originalUrl);//req.originalUrl获取当前URL
});
// *号可以通配URL为localhost:3000/test/XXX的任意url
2./:id的占位标识符url
router.get('/t-shirt/:id', (req, res, next) => {
console.log(req.params)
res.json({
data: {
title: `这是第${ req.params.id }个T恤衫`
}
})
})
//在url的:id处输入任意的内容,就会在下面:id处替换成相应的值
3…next()权限控制转移
- express的路由控制有个next()功能,在定义了多个路由的时候,使用next对匹配的url会按顺序执行,如果不使用next进行权限转移,只会执行第一个满足的路由规则。
app.get('/test/*',function(req,res,next){
//res.send("userid:");//要进行转移,不要响应客户端
req.temp="给你控制权";
next(1);
//把权限转移到下一个路由,next也可以带参数传向下一个get操作,
// 左后在send中可以累积的响应到客户端
});
app.get('/test/next',function(content,req,res){
res.send("content: "+req.temp);
})
//注意:此处的send只能在一个res中出现,否则会报错,如果有多的get步骤的话,可以在每个里面都可//以带上next()以保证继续向下运行,如果没有next那就会停止执行。
//next()一般用来编写中间件
//中间件一般不直接对客户端进行响应,而是对请求进行一些预处理,再传递下去;
//中间件一般会在路由处理之前执行;
- 路由的匹配是模糊匹配的,如果get的第一个参数为“/”,那带/的所有的操作都执行