路由:指应用程序的端点 (URI) 如何响应客户端请求。
路由定义采用以下结构:app.METHOD(PATH, HANDLER)
- app是 的一个实例express。
- METHOD是一个HTTP 请求方法,小写。
- PATH 是服务器上的路径。
- HANDLER 是路由匹配时执行的函数。
一.路线方法
GET 和 POST 方法
//注册get路由
app.get('/', (req, res) => {
res.send('get');
});
//注册post路由
app.post('/dologin', (req, res) => {
res.send('post');
});
app.put('/insertData', (req, res) => {
res.send("put");
});
app.delete('/delete', (req, res) => {
res.send('delete');
});
app.all() 路由守卫 针对某个路由写的安全守卫
app.all('/', (req, res, next) => {
console.log('进入当前页面之前');
console.log(req.url);
//next 继续执行
//next 加参数 可以跳转到某个路由 也可以直接到错误响应
next();
});
app.get('/', (req, res) => {
console.log('进入当前页面');
res.send('首页');
});
在进入路由之前会先进行路由安全守卫,先进入app.all()
输出结果:
二.路线路径
2.1 路径写 ?
// 路由路径匹配为/addmen /admen 问号之前的字母是有或者没有
app.get('/add?men', (req, res) => {
res.send('?匹配路径');
});
2.2 路径写 +
// 路由路径匹配为 /adue /addue等 加号之前的字母一直重复是可以的
app.get('/ad+ue', (req, res) => {
res.send('+ 匹配路径');
});
2.3 路径写 *
// 路由路径匹配为 ad和am之前可以添加任意的字母 比如/adhham /adbam等
app.get('/ad*am', (req, res) => {
res.send('* 匹配路径');
});
2.4 路径写 ()
//路径里面 可以按照正则 ()
// 路由路径匹配为/getName或者/getuserName
app.get('/get(user)?Name', (req, res) => {
res.send('() 写子表达式');
});
2.5 路径写 / /
// 路由路径匹配为带有a的
app.get(/a/, function (req, res) {
res.send('/a/')
})
三.路由动态传值
express中的路由动态传值 类似vue路由的动态传值,在路由路径上直接设置动态变量,获取动态传值 req.params。
app.get("/send/:id/:name/msg/:info",(req,res)=>{
console.log(req.params);
res.send("路由动态传值");
});
输入:http://localhost:8000/send/11/:name/msg/iiii
//路由动态传值使用连接符
app.get('/msginfo/:id-:msg',(req,res)=>{
console.log(req.params);
res.send("使用- 连接");
});
输入:http://localhost:8000/msginfo/22-ffff
输出结果:
四.路由链式
必须使用next() 到下一个回调函数
app.get('/adduser',(req,res,next)=>{
//在这里可以做相关代码检测
next();
},(req,res)=>{
res.send('adduser');
});
把回调函数写在外部或者内部
let fun1=(req,res,next)=>{
next();
}
let fun2=(req,res,next)=>{
next();
}
app.get('/addback',[fun1,fun2],(req,res)=>{
res.send('addback');
});
路由同路径不同的操作
app.route('/msginfo').get((req,res)=>{
res.send("get路由");
}).post((req,res)=>{
res.send("post路由");
});
res 服务端响应操作的相关方法:
- res.download() 响应下载
- res.end() 响应结束
- res.json() json数据格式响应
- res.jsonp() 带jsonp响应
- res.redirect() 路由重定向
- res.render() 渲染ejs模板
- res.send() 响应数据
- res.sendStatus() 发送响应状态
//接口响应json
app.get('/getstulists',(req,res)=>{
let list=[{
name:'maodou'},{
name:'zhangsan'}];
res.json(list);
});
//文件下载
app.get('/downfile',(req,res)=>{
let path='./file/abc.txt';
res.download(path,(err)=>{
if(err)
throw err;
console.log("下载成功!");
});
});
//路由重定向
app.get("/logininfo",(req,res)=>{
let login=true;
if(login)
{
res.redirect('/');
}
else{
res.send('登录');
}
});