一、基本路由
- 路由是指应用程序的端点(URI)如何响应客户端请求。
1.get路由
app.get('/',(req,res)=>{
res.send("首页");
});
2.post路由
app.post('/dologin',(req,res)=>{
res.send('post');
});
3.put路由
app.put('/insertData',(req,res)=>{
res.send("put");
});
4.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();
})
二、路由的路径
- 路由的路径可以写成匹配模式。
- 路由路径与请求方法结合,定义了可以发出请求的端点。路由路径可以是字符串,字符串模式或正则表达式。
- 字符?,+,*,和()是他们的正则表达式的对应的子集。连字符(-)和点(.)由基于字符串的路径按字面意义进行解释。
1.?匹配路由路径
app.get('/fat?pig',(req,res)=>{
res.send("?匹配路径");
});
2.+匹配路由路径
app.get('/ab+cd',(req,res)=>{
res.send("+匹配路径");
});
3.*匹配路由路径
app.get('/ef*gh',(req,res)=>{
res.send("*匹配路径");
});
4.()匹配路由路径
app.get('/ad(ab)?bc',(req,res)=>{
res.send("()匹配路径");
});
5.使用正则直接写路由路径
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传值
<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传值也可以使用监听获取数据
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("使用-连接符");
});
四、路由的链式操作
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('登录');
}
})