本文為大家總結了node.js中的路由,中間件,ge請求和post請求的參數的使用方法,非常的詳細,有需要的小伙伴可以參考下
一、路由
1、什麼是路由
伺服器需要根據不同的URL或請求來執行不一樣的操作,我們可以透過路由來實現這個步驟
2、實作路由的方法
2.1、get請求存取網址時,做什麼事##
app.get("网址",function(req,res){ });2.2、post請求存取網址時,做什麼事##
app.post("网址",function(req,res){ });# # 2.3、任何請求存取這個網址
app.all("网址",function(){ });注意:1、'這裡的網址不分大小寫,例如
app.get("/AAb",function(req,res){ //我们访问 /aab也是可以的 res.send("你好"); });2、你路由到/a ,實際路由到/a? 2&sex=nan 也能被處理。 3、路由中正規表示式的使用 3.1、正規表示式中,未知部分用圓號分組,然後可以用req.params[0]、[1]得到括號。 req.params類數組物件。
app.get(/^\/student\/([\d]{10})$/,function(req,res){ res.send("学生信息,学号" + req.params[0]); });3.2、冒號寫法(建議)
var express=require('express'); var app=express(); //冒号1 app.get("/student/:id",function (req,res) { var id=req.params["id"]; //得到id的值 var reg=/^[\d]{6}$/; if(reg.test(id)){ res.send(id); }else { res.send("请检查格式"); } }); //冒号2 app.get("/:username/:oid",function(req,res){ var username = req.params["username"]; //得到username的值 var oid = req.params["oid"]; //得到//oid的值 res.write(username); res.end(oid); }); app.listen(3000);運作結果:#冒號1:
# 冒號2 :
二、中間件
1、什麼是中間件
應用於應用之間 充當連接服務的,例如上面的get、post請求就是中間件 2、express中所有的路由(中間件)的順序(很重要) 2.1、next()方法var express=require("express"); var app=express(); app.get("/",function (req,res,next) { console.log(1); next(); //如果没有next参数,就只会conlose出来1,而不会是1,2 }); app.get("/",function (req,res) { console.log(2); }); app.listen(3000);2.2、順序衝突:下面這兩個路由,看起來沒有關係,但其實是有衝突的,因為admin可以當做用戶名login可以當做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)運行結果:當用戶名login可以當做id
var express=require("express"); var app=express(); //具体的 app.get("/admin/login",function(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)運行結果:當用戶名login可以當做id
var express=require("express"); var app=express(); app.get("/:username/:id",function (req,res,next) { var username=req.params.username; //检索数据库,如果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)運行結果:當用戶名login可以當做id
var express=require("express"); var app=express(); //匹配所有网址 //法一 //当你不写路径的时候,实际上就相当于“/”,就是所有网址 // app.use(function (req,res,next) { // console.log(new Date()); // next(); //执行下面的 // }); //法二 app.use("/",function (req,res,next) { console.log(new Date()); next(); //执行下面的 }); //匹配/admin所有地址,例如/admin/ss/aa这个都行 app.use("/admin",function (req,res) { res.write(req.originalUrl+"\n"); // /admin/ss/aa res.write(req.path+"\n"); // /ss/aa res.write(req.baseUrl+"\n"); // /admin res.end("你好"); }); app.listen(3000);運行結果:當用戶名可以當做id##我們訪問172.0.0.1:3000/admin/login時只會輸出 用戶資訊admin 而不會是管理員登入 2.3、解決順序衝突 2.3.1、具體的往上寫,抽象的往下寫
var express=require("express"); var fs=require("fs"); var app=express(); //当你不写路径的时候,实际上就相当于“/”,就是所有网址 app.use(haha); //haha是一个函数 app.listen(3000); // function haha(req,res) { // res.send("哈哈"); // } app.use('/admin',function (req,res) { res.send('管理员登录'); }) //根据当前的网址,读取punlic文件夹的文件 //如果有这个文件,就渲染这个文件 //如果没有这个文件,那么next() function haha(req,res,next) { var filePath=req.originalUrl; //根据当前的网址,读取public文件夹的文件 //如果有这个文件,那么渲染这个文件 //如果没哟偶这个文件,那么next(); fs.readFile("./public/"+filePath,function (err,data) { if(err){ //文件不存在 next(); //一定要写,不然处于挂起状态 return; } res.send(data.toString()); }) }運行結果:當我們訪問172.0.0.1:3000/admin/login時輸出 管理員登入 而不會是用戶資訊admin 2.3.2 、檢索資料庫
var express=require("express"); var app=express(); //静态服务 app.use('/jingtai',express.static("./public")); //新的路由 app.get('/images',function (req,res) { res.send("哈哈") }); //会自动识别err参数,如果有,那么就这个函数能捕获err app.use(function (req,res) { res.status(404).send("没有这个页面!"); }) app.listen(3000);3、app.use()中間件:與get、post不同的是,他的網址不是精確匹配的。而是能夠有小資料夾拓展的。 3.1、get.use()的模糊匹配
var express=require("express"); var app=express(); // //设置ejs文件夹名字 //在day3文件夹下新建文件夹a,然后在里面放ejs文件 // app.set("views","a") app.set("view engine","ejs"); app.get("/",function(req,res) { res.render("haha",{news:[]}); }); app.get("/check",function (req,res) { res.send({ "user":"ok" }) }) app.listen(3000);3.2、get.use()讀取檔案
var express=require("express"); var app=express(); app.get("/",function (req,res) { console.log(req.query); res.send(); }); app.listen(3000);4、r#ender和send
# # 4.1、res.send()方法快速測試頁
//form.ejs <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <form action="#" method="post"> <input type="text" name="name"/> <input type="text" name="age"/> <input type="submit"/> </form> </body> </html>
4.2、res.render()渲染內容,將會依照views中的範本檔案進行渲染。如果不想使用views資料夾,想自己設定資料夾名字,那麼app.set("views","aaaa");
//.jsvar express=require("express"); var bodyParser=require('body-parser'); var app=express(); app.set('view engine','ejs') app.get('/',function (req,res) { res.render("form"); }); //bodyParser API app.use(bodyParser.urlencoded({extended:false})); app.post('/',function (req,res) { console.log(req.body); }); app.listen(3000);
5、req.query:當輸入http://127.0.0.1 :3000/?id=0&ag=9
rrreee運行結果:
三、get請求參數post請求參數:
GET請求的參數:在URL中,在Express中,不需要使用url模組了。可以直接使用req.query物件。
POST請求參數:在express中不能直接取得,必須使用body-parser模組。使用後,將可以用req.body得到參數。但是如果表單中含有檔案上傳,那麼還是需要使用formidable模組。
rrreeerrreee運行結果:
#上面是我整理給大家的,希望今後會對大家有幫助。
在Vue中有關使用ajax方法有哪些? 在vue.js中如何實作資料分發slot#使用Angular2如何整合外掛程式(詳細教學)javascript陣列如何拍平? ######以上是在node.js中有關路由,中間件的詳細說明說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!