站長資訊網
        最全最豐富的資訊網站

        聊聊nodejs中的get/post請求和中間件

        本篇文章帶大家了解一下node.js中的熱重啟、get請求、post請求和中間件,希望對大家有所幫助!

        聊聊nodejs中的get/post請求和中間件

        一、node熱重啟

        1.安裝

        npm i nodemon

        2.運行啟動

        nodemon .bin/www

        二、關于get請求

        一般在網站開發中,get都用作數據獲取和查詢,類似于數據庫中的查詢操作,當服務器解析前臺資源后即傳輸相應內容;而查詢字符串是在URL上進行的,形如:

        http://localhost:8080/login?goods1=0001&goods2=0002

        獲取前臺get請求

        通過req.query可以獲得用戶發送的get請求,之后通過node操作將相應數據返回給用戶。

        如果發送的是:

        http://localhost:8080/login?goods1=0001&goods2=0002

        響應的話則通過:

        req.query

        他會獲取到全部數據,或

        req.query.goods1 req.query.goods2

        來單獨或去每一個數據。總之不同的需求對應不同的業務,大家按自己的需要來獲取;

        實例

        下面通過一個實例來對獲取get參數進行一個總結:

        HTML:

        <!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <title></title>     </head>     <body>         <form action="http://localhost:8080/login" method="get">             用戶:             <input type="text" name="user" id="user" placeholder="用戶名"/>             <br>             密碼:             <input type="password" name="password" id="password" placeholder="密碼"/>             <br>             <input type="submit" value="提交"/>         </form>     </body> </html>

        node:

        const express = require("express"); var app = express();  app.get("/",function(req,res){     res.send("主頁"); });  app.get("/login",function(req,res){     console.log(req.query);     res.send("登錄路由,user為:"+req.query.user+"==>   password為:"+req.query.password); });  app.listen(8080);

        三、關于POST請求

        post方法作為http請求很重要的一部分,幾乎所有的網站都有用到它,與get不同,post請求更像是在服務器上做修改操作,它一般用于數據資源的更新。 相比于get請求,post所請求的數據會更加安全。上一章中我們發現get請求會在地址欄顯示輸入的用戶名和密碼(有中文時會轉化為BASE64加密),而post請求則會將數據放入http包的包體中,這使得別人無法直接看到用戶名和密碼!

        Express如何設置POST請求

        1.首先我們得知道在form表單進行post請求,enctype屬性一般設置為“application/x-www-form-urlencoded”,如果設置成multipart/form-data,則多用于文件上傳,如下:

        <form action="#" method="post" enctype="application/x-www-form-urlencoded"> </form>

        2.設置解析body中間件

        app.use(express.urlencoded())

        3.獲取body數據

        req.body.username

        登陸案例:

        HTML:

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <meta name="viewport" content="width=device-width, initial-scale=1.0">     <meta http-equiv="X-UA-Compatible" content="ie=edge">     <title>Document</title> </head> <body>     <h1>登陸</h1>     <form action="/login" method="POST">         <div>             用戶名:<input type="text" name="username">         </div>         <div>             密碼:<input type="password" name="password">         </div>         <button>登陸</button>     </form>        </body> </html>

        APP.JS

        var express = require('express'); var path = require('path') var app = express(); var sqlQuery = require('./lcMysql')  // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(express.static(path.join(__dirname, 'public'))); //解析post提交的數據 app.use(express.urlencoded())  //搜索首頁 app.get('/',(req,res)=>{   res.render('index.ejs') })  //登陸頁 app.get('/login',(req,res)=>{   res.render('login') }) //處理登陸請求 app.post('/login',async (req,res)=>{   //獲取用戶名和密碼   let username = req.body.username    let password = req.body.password   //查詢數據庫是否由此用戶名和密碼   let sqlStr = 'select * from user where username = ? and password = ?';   let arr = [username,password];   let result = await sqlQuery(sqlStr,arr)   if(result.length == 0 ){     res.send("登陸失敗")   }else{     res.send("登陸成功")   }  })   module.exports = app;

        四、中間件

        從字面意思,我們可以了解到它大概就是做中間代理操作,事實也是如此;大多數情況下,中間件就是在做接收到請求和發送響應中間的一系列操作。事實上,express是一個路由和中間件的web框架,Express 應用程序基本上是一系列中間件函數的調用。

        1.瀏覽器發送請求

        2.express接受請求

        中間處理的過程

        3.路由函數處理渲染(req,res)

        4.res.render渲染

        中間件函數可以執行以下任務:

        • 執行任何代碼。
        • 對請求和響應對象進行更改。
        • 結束請求/響應循環。
        • 調用堆棧中的下一個中間件函數。

        中間件也分為應用層中間件、路由中間件、內置中間件、錯誤處理中間件和第三方中間件。下面分別對以下進行說明:

        1.應用層中間件

        應用級中間鍵綁定到app對象使用app.use和app.METHOD()-需要處理http請求的方法,例如GET、PUT、POST,將之前的get或者post替換為use就行。 例如下面實例:

        const express=require("express");  var app=express();  //匹配路由之前的操作 app.use(function(req,res,next()){     console.log("訪問之前"); });  app.get("/",function(req,res){     res.send("主頁"); });  app.listen(8080);

        這時我們會發現http://localhost:8080/地址一直在加載,但命令行里顯示了“訪問之前”,說明程序并不會同步執行,如果使用next來是路由繼續向下匹配,那么就能又得到主頁數據了:

        const express=require("express");  var app=express();  //匹配路由之前的操作 app.use(function(req,res,next){     console.log("訪問之前");     next(); });  app.get("/",function(req,res){     res.send("主頁"); });  app.listen(8080);

        當然也可以簡化寫法:

        const express=require("express");  var app=express();  app.use(function(req,res,next){     console.log("訪問之前");     next(); },function(req,res){     res.send("主頁"); });  app.listen(8080);

        因此,在進行路由匹配之前或再錄又要繼續向下執行時想做個操作,那么應用層中間件無疑是好的選擇。

        2.路由中間件

        路由級中間件和應用級中間件類似,只不過他需要綁定express.Router();

        var router = express.Router()

        在匹配路由時,我們使用 router.use() 或 router.VERB() ,路由中間件結合多次callback可用于用戶登錄及用戶狀態檢測。

        const express = require("express"); var app = express(); var router=express.Router();  router.use("/",function(req,res,next){     console.log("匹配前");     next(); });  router.use("/user",function(req,res,next){     console.log("匹配地址:",req.originalUrl);     next(); },function(req,res){     res.send("用戶登錄"); });  app.use("/",router);  app.listen(8080);

        總之在檢測用戶登錄和引導用戶應該訪問哪個頁面是,路由中間件絕對好用。

        3.錯誤處理中間件

        顧名思義,它是指當我們匹配不到路由時所執行的操作。錯誤處理中間件和其他中間件基本一樣,只不過其需要開發者提供4個自變量參數。

        app.use((err, req, res, next) => {         res.sendStatus(err.httpStatusCode).json(err); });

        一般情況下,我們把錯誤處理放在最下面,這樣我們即可對錯誤進行集中處理。

        const express=require("express");  var app=express();  app.get("/",function(req,res,next){     const err=new Error('Not Found');     res.send("主頁");     next(err); });  app.use("/user",function(err,req,res,next){     console.log("用戶登錄");     next(err); },function(req,res,next){     res.send("用戶登錄");     next(); });  app.use(function(req,res){     res.status(404).send("未找到指定頁面"); });  app.listen(8080);

        4.內置中間件

        從版本4.x開始,Express不再依賴Content,也就是說Express以前的內置中間件作為單獨模塊,express.static是Express的唯一內置中間件。

        express.static(root, [options]);

        通過express.static我們可以指定要加載的靜態資源。

        5.第三方中間件

        形如之前我們的body-parser,采用引入外部模塊的方式來獲得

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久九九亚洲精品| 久久九九久精品国产| 精品久久久久久无码中文字幕 | 最新国产精品亚洲| 久久精品国产亚洲精品2020 | 99RE8这里有精品热视频| 人妻少妇精品中文字幕av蜜桃| 男人的天堂精品国产一区| 国产成人高清精品免费观看| 国产精品欧美一区二区三区不卡 | 亚洲精品福利视频| 国产成人亚洲合集青青草原精品 | 999在线视频精品免费播放观看| 亚洲精品美女久久久久99小说| 国产偷伦精品视频| 成人精品一区二区久久| 中国精品videossex中国高清| 国语自产拍精品香蕉在线播放| 国产精品视频一区二区噜噜 | 国产精品va无码一区二区| 日韩精品久久久肉伦网站| 中文字幕一区二区三区日韩精品| 麻豆国内精品欧美在线| 久久www免费人成精品香蕉| 国产精品一区三区| 国产精品白丝AV嫩草影院| 国产高清在线精品一本大道| Aⅴ精品无码无卡在线观看| 91亚洲国产成人久久精品网址| 99精品国产一区二区| 99久久国产综合精品五月天喷水| 中文字幕精品一区二区日本| 99re只有精品8中文| 国产va免费精品| 国产在线精品一区二区在线观看 | 99国产精品久久久久久久成人热| 精品国产一区二区三区无码| 精品无码人妻一区二区免费蜜桃| 国产精品亚洲片在线观看不卡| 国产成人久久精品激情| 99热在线日韩精品免费|