详细说明node.js中路由、中间件、ge请求和post请求的参数
一、路由
1.什么是路由
服务器需要根据不同的URL或请求执行不同的操作,我们可以通过路由实现这一步
2.实现路由的方法
2.1.当你收到访问网站的请求时,你会怎么做
Get('网址',函数(req,RES){ });2.2.当你发布访问网站的请求时,你会怎么做
App.post('网站地址',函数(req,RES){ });2.3.任何访问本网站的请求
App.all ('URL ',function(){ });注:1。例如,此处的网址不区分大小写
App。get ('/aab ',function (req,RES){//我们访问/aab res.send ('hello ')也可以;});2.你转到了/a,实际上是/a?Id=2sex=nan也可以处理。
3.路由中正则表达式的使用
3.1.在正则表达式中,未知部分用括号分组,然后可以通过使用req.params[0]和[1]获得。req.params类数组对象。
app . get(/\/student \/([\ d]{ 10 })$/,函数(req,res) {res.send('学生信息,学生编号' req . params[0]);});3.2、冒号书写(推荐)
var express=require(' express ');var app=express();//冒号1app.get ('/student/: id ',function (req,RES){ var id=req . params[' id '];//获取id varreg=/[\ d] {6} $/的值;if(reg . test(id)){ RES . send(id);}else {res.send('请检查格式');}});//冒号2app . get('/: username/: oid ',函数(req,RES) {var username=req。参数['用户名'];//获取username var oid=req . params[' oid ']的值;//获取//oid res.write(用户名)的值;RES . end(oid);});app . listen(3000);运行结果:冒号1:
冒号2:
第二,中间件
1.什么是中间件
用作应用程序之间的连接服务,例如,上面的get和post请求是中间件
2.快递中所有路线(中间件)的顺序(非常重要)
2.1、next()方法
var express=require(' express ');var app=express();app.get('/'),function (req,res,next){ console . log(1);next();//如果没有下一个参数,只有conlose会出来1,而不是1,2 });app.get('/'),function (req,RES){ console . log(2);});app . listen(3000);2.2、订单冲突:以下两条路线看似没有关系,但实际上是有冲突的,因为admin可以作为用户名登录可以作为id使用。
var express=require(' express ');var app=express();app . get('/: username/: id ',function(req,RES){ console . log(' 1 ');Res.send('用户信息' req . params . username);});app.get('/admin/login ',function(req,RES){ console . log(' 2 ');Res.send('管理员登录');});app.listen(3000)运行结果:当我们访问172.0.0.1: 3000/admin/login时,只会输出用户信息admin,不会输出管理员登录。2.3.解决订单冲突
2.3.1.具体地写下来,抽象地写下来
var express=require(' express ');var app=express();//特定app.get ('/admin/login ',函数(req,RES){ console . log(' 2 ');Res.send('管理员登录');});//抽象app . get('/: username/: id ',function (req,RES){ console . log(' 1 ');Res.send('用户信息' req . params . username);});app.listen(3000)运行结果:当我们访问172.0.0.1: 3000/admin/login时,输出的是管理员登录名,而不是用户信息admin2.3.2,并检索数据库
var express=require(' express ');var app=express();app . get('/: username/: id ',函数(req,res,next){ var username=req . params . username;//检索数据库,如果用户名不存在,则next() if(检索数据库){ console . log(' 1 ');Res.send('用户信息')} else { next();}});app.get('/admin/login ',function (req,RES){ console . log(' 2 ');Res.send('管理员登录');});App.listen(3000)3app.use()中间件:不同于get和post,他的网址不完全匹配。但是可以用小文件夹展开。3.1.get.use()的模糊匹配
var express=require(' express ');var app=express();//匹配所有网址//法一//当你不写路径的时候,实际上就相当于"/",就是所有网址//app.use(函数(req,res,next){//控制台。日志(新日期());//next();//执行下面的//});//法二app.use('/')、function (req、res、next){ console。日志(新日期());next();//执行下面的});//匹配/admin所有地址,例如/admin/ss/aa这个都行app.use('/admin ',function (req,RES){ RES . write(req。原始网址' \ n ');///admin/ss/aa RES . write(req。路径' \ n ');///ss/aa RES . write(req。baseURl ' \ n ');///admin res.end('你好');});app。听(3000);3.2、get.use()读取文件var express=require(' express ');var fs=require(' fs ');var app=express();//当你不写路径的时候,实际上就相当于"/",就是所有网址app.use(哈哈);//哈哈是一个函数app。听(3000);//函数哈哈(请求,res) {//res.send('哈哈');//}app.use('/admin ',function (req,res) { res.send('管理员登录');})//根据当前的网址,读取双关语文件夹的文件//如果有这个文件,就渲染这个文件//如果没有这个文件,那么下一个()函数哈哈(req,res,next){ var filePath=req。原创者;//根据当前的网址,读取公众的文件夹的文件//如果有这个文件,那么渲染这个文件//如果没哟偶这个文件,那么next();fs.readFile(' ./public/'文件路径,函数(err,data) { if(err){ //文件不存在next();//一定要写,不然处于挂起状态返回;} RES . send(数据。ToString());})}4、渲染和发送4.1、res.send()方法快速测试页
var express=require(' express ');var app=express();//静态服务app.use('/jingtai ',express.static(' ./public ');//新的路由app.get('/images ',函数(请求,res) { res.send('哈哈')});//会自动识别犯罪参数,如果有,那么就这个函数能捕获errapp.use(function (req,res) { res.status(404)).发送('没有这个页面!');})app。听(3000);4.2、res.render()渲染内容,将会根据视图中的模板文件进行渲染。如果不想使用视图文件夹,想自己设置文件夹名字,那么app。集合(‘视图’,‘AAAA’);
var express=require(' express ');var app=express();////设置部署文件夹名字//在第3天文件夹下新建文件夹一个,然后在里面放部署文件//app。set(' view ',' a')app.set('view engine ',' ejs ');app.get('/',function(req,res) { res.render('haha ',{ news :[]});});app.get('/check ',函数(req,RES){ RES . send({ ' user ' : ' ok ' })})app。听(3000);5、请求:当输入http://127.0.0.1:3000/?id=0ag=9 var express=require(' express ');var app=express();app.get('/'),函数(req,RES){ console。日志(请求。查询);RES . send();});app。听(3000);运行结果
三获得请求参数邮政请求参数:
得到请求的参数:在统一资源定位器中,在表达中,不需要使用全球资源定位器(统一资源定位符)模块了。可以直接使用req.query对象。
邮政请求参数:在表达中不能直接获得,必须使用正文分析器模块。使用后,将可以用请求。正文得到参数。但是如果表单中含有文件上传,那么还是需要使用可怕的模块。
//form.ejs!doctype html html lang=' en ' head meta charset=' UTF-8 ' title/title/head dyform action=' # ' method=' post ' input type=' text ' name=' name '/input type=' text ' name=' age '/input type=' submit '/form/body/html/.jsvar express=require(' express ');var body parser=require(' body-parser ');var app=express();app.set('view engine ',' ejs')app.get('/',function (req,RES){ RES . render(' form ');});//BodyParser Apippap。使用(BodyParser。URL编码({扩展: false });app.post('/')、函数(req、RES){控制台。日志(请求。身体);});app。听(3000);运行结果:
版权声明:详细说明node.js中路由、中间件、ge请求和post请求的参数是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。