Express框架--路由

一、基本路由

  • 路由是指应用程序的端点(URI)如何响应客户端请求。

1.get路由

// get路由
app.get('/',(req,res)=>{
   res.send("首页");
});

2.post路由

// post路由--表单或者ajax请求触发
app.post('/dologin',(req,res)=>{
   res.send('post');
});

3.put路由

// put路由
app.put('/insertData',(req,res)=>{
   res.send("put");
});

4.delete路由

// delete路由
app.delete('/delete',(req,res)=>{
   res.send("delete");
});

5.特殊的路由方法–app.all()

  • app.all()用于为所有HTTP请求方法的路径加载中间件功能。
  • 路由守卫:针对某个路由写的安全守卫
// 路由守卫:针对某个路由写的安全守卫
app.all('/',(req,res,next)=>{
   console.log("进入当前页面之前");
   console.log(req.url);
   // next继续执行
   // next加参数,可以跳转到某个路由,也可以直接到错误响应
   next();
})

二、路由的路径

  • 路由的路径可以写成匹配模式。
  • 路由路径与请求方法结合,定义了可以发出请求的端点。路由路径可以是字符串,字符串模式或正则表达式。
  • 字符?,+,*,和()是他们的正则表达式的对应的子集。连字符(-)和点(.)由基于字符串的路径按字面意义进行解释。

1.?匹配路由路径

// 写?匹配前面的子表达式0次或一次
// ?匹配的是/fatpig或者/fapig
app.get('/fat?pig',(req,res)=>{
   res.send("?匹配路径");
});

2.+匹配路由路径

// 写+匹配前面的子表达式1次或多次
// +匹配的是/abcd或者/abbcd等等
app.get('/ab+cd',(req,res)=>{
   res.send("+匹配路径");
});

3.*匹配路由路径

// 写*匹配的是中间任意字符
// *匹配的是/efgh或者/efghnhhggh等等
app.get('/ef*gh',(req,res)=>{
   res.send("*匹配路径");
});

4.()匹配路由路径

// ()标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用
// 匹配的是/adbc或者/adabbc
app.get('/ad(ab)?bc',(req,res)=>{
   res.send("()匹配路径");
});

5.使用正则直接写路由路径

// 使用正则直接写路由路径
// 匹配的是路径里面带sendMsg的
app.get('/sendMsg/i',(req,res)=>{
   res.send("正则匹配路径");
});

三、路由上的参数

1.get传值

  • 动态路由传值使用连接符get路由传值,参数在req.query属性上获取,以json数据格式存在
// get路由传值,参数在req.query属性上获取,以json数据格式存在
app.get('/sendData',(req,res)=>{
   console.log(req.query);
   res.send('get传参');
});

2.post传值

  • index.ejs
	<form action="/sendPost" method="POST">
       <ul>
           <li>姓名:<input type="text" name="username"></li>
           <li>密码:<input type="text" name="userpwd"></li>
           <li><button>登录</button></li>
       </ul>
   </form>

(1)post传值也可以使用监听获取数据

  • app.js
const ejs=require("ejs");
app.get('/login',(req,res)=>{
   ejs.renderFile('./view/index.ejs',(err,str)=>{
       if(err)
           throw err;
       res.send(str);
   })
})
app.post('/sendPost',(req,res)=>{
   // express框架中post传值也可以使用监听获取数据
   var inf0='?';
   req.on('data',(msg)=>{
       info+=msg;
   });
   req.on('end',()=>{
       console.log(info);
       res.send('post值');
   })
});
// 路径http://localhost:8080/?id=1&name=2

(2)使用第三方中间件–(body-parser插件)

  • 安装body-parser插件:cnpm install --save-dev body-parser
const ejs=require("ejs");
app.get('/login',(req,res)=>{
   ejs.renderFile('./view/index.ejs',(err,str)=>{
       if(err)
           throw err;
       res.send(str);
   })
})
// 还可以使用第三方中间件(插件:body-Parser)
// 引入body-parser
const bodyParser=require("body-parser");
// 使用中间件
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());//把当前数据全部转化成json格式
app.post('/sendPost',(req,res)=>{
   console.log(req.body);
   res.send('post值');
});
// 路径http://localhost:8080/login
  • 如果express框架要使用body获取数据,需要使用body-parser中间件。

3.路由动态传值

  • 类似vue的动态传值
  • 那么,动态值怎么设置呢?
  • 在路由路径上直接设置动态变量
// 在路由路径上直接设置动态变量
// 获取动态传值,req.params
// 路径http://localhost:8080/send/10086/zzz/msg/aaa
app.get("/send/:id/:name/msg/:info",(req,res)=>{
   console.log(req.params);//{ id: '10086', name: 'zzz', info: 'aaa' }
   res.send("路由动态传值");
});

动态路由传值使用连接符

// 动态路由传值使用连接符
// 路径http://localhost:8080/msginfo/10086-zzz
app.get('/msginfo/:id-:msg',(req,res)=>{
   console.log(req.params);//{ id: '10086', msg: 'zzz' }
   res.send("使用-连接符");
});

四、路由的链式操作

  • 必须使用next()到下一个回调函数。

1.回调函数写在内部

app.get('/adduser',(req,res,next)=>{
   // 在这里可以做相关代码检测
   next();
},(req,res)=>{
   res.send('adduser');
});

2.回调函数写在外部

let fun1=(req,res,next)=>{
   next();
}
let fun2=(req,res,next)=>{
   next();
}
app.get('/addback',[fun1,fun2],(req,res)=>{
   res.send('addback');
});

3.路由同路径不同操作

// 路由同路径不同操作
app.route('/msginfo').get((req,res)=>{
   res.send("get路由");
}).post((req,res)=>{
   res.send("post路由");
})

五、服务端响应操作的相关方法

方法描述
res.download()响应下载
res.end()响应结束
res.json()json数据格式响应
res.jsonp()带jsonp响应
res.redirect()路由重定向
res.render()渲染ejs模板
res.send()响应数据
res.sendStatus()发送响应状态

1.接口响应json

// 接口响应json
app.get('/getlist',(req,res)=>{
   let list=[{name:'zzz'},{name:'aaa'}];
   res.json(list);
})

2.文件下载

// 文件下载
app.get('/downfile',(req,res)=>{
   let path='./file/abc.txt';
   res.download(path,(err)=>{
       if(err)
           throw err;
       console.log("下载成功!");
   })
})

3.路由重定向

// 路由重定向
app.get("/logininfo",(req,res)=>{
   let login=true;
   if(login)
   {
       res.redirect('/');
   }
   else{
       res.send('登录');
   }
})
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南初️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值