express框架---路由

路由:指应用程序的端点 (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('登录');
    }
    });

猜你喜欢

转载自blog.csdn.net/weixin_47863547/article/details/119489785