T-Node.js基礎-day05-中間件、mysql模塊

中間件

  • 瀏覽器向服務器發請求,中間件攔截請求並作出響應;中間件最終是要爲路由服務的。
  • 分爲五類:應用級中間件、路由級中間件、內置中間件、第三方中間件、錯誤處理中間件(瞭解)。
  1. 應用級中間件
    • 也稱爲自定義中間件,就是一個函數
    • app.use(URL,callback);
    • URL:表示要攔截哪一個路由,對應路由中的URL
    • callback:攔截到以後,自動調用
      • req:請求的對象
      • res:響應的對象
      • next:是一個函數,表示執行一下一個中間件或路由
    //創建中間件,攔截對/list的請求,如果提供的用戶名爲root,則允許查看後臺數據,否則響應‘無此權限’
    //參數1:攔截的URL
    //參數2:攔截到以後,執行的回調函數,在回調函數中可以獲取到請求,以及做出響應
    app.use('/list',function(req,res,next){
        //req請求對象
        //獲取查詢字符串傳遞的數據
        console.log(req.query);
        //res響應對象
        //判斷數據是否爲root,如果不是root,則響應無此權限,否則允許往後執行(可能有其他中間件,也可能是路由)
        if(req.query.uname!=='root'){
            res.send('無此權限');
        }else{
            //執行下一個中間件或路由
            next();
        }
    });
    //獲取後臺數據的路由(get   /list )
    app.get('/list',(req,res)=>{
        res.send('這是後臺的數據');
    });
    

    練習:創建購物車路由,(get /shopping),傳遞商品的價格price,在中間件中將價格打九折,最後在路由中響應‘商品價格:xxx’
  2. 路由級中間件
    路由器的使用
  3. 內置中間件
    express中當前只有一個內置中間件:託管靜態資源(服務器吧所有的靜態資源(html,css等)託管到指定的目錄下,如果瀏覽器端要請求文件,不需要再裝進路由,自動到該目錄下查找)
    app.use( express.satic('目錄名稱') );
    //託管靜態資源
    //把所有靜態資源託管到public下,瀏覽器請求自動到這個目錄下查找
    app.use(express.static('public'));
    //練習:託管靜態資源到file目錄下,查看如果和public有相同的文件名稱,哪一個起作用
    app.use(express.static('files'));//先託管的先起作用
    

    練習:託管靜態資源到file目錄下,查看如果和public有相同的文件名稱,哪一個起作用
    練習:創建web服務器,託管靜態資源到public目錄,在該目錄下創建登錄的網頁login.html,點擊登錄按鈕,向服務器發請求(post/mylogin),在路由中獲取數據。
  4. 第三方中間件使用
    • 第三方中間件都是以第三方模塊的形式出現,需要先下載安裝,express在下載安裝的時候回附帶下載一些第三方中間件
    • body-parse的使用:
    //1.引入中間件
    const bodyParser=require('body-parser');
    //2.使用中間件(在路由之前)
    app.use( bodyParser.urlencoded({
       extended:false//不使用第三方的qs模塊解析爲對象,而是使用querystring這個核心模塊
    }) );
    //3.在路由種獲取數據,格式爲對象
    req.body
    

mysql模塊

  1. 連接數據庫
    mysql.exe -h127.0.0.1 -P3306 -uroot -p
    mysql -uroot
    mysql -uroot<腳本文件地址
  2. 回顧mysql的增刪改查
    insert into emp values();
    delete from emp where eid=5;
    update emp set phone='...',sex=0 where eid=5;
    select * from emp;
  3. 下載安裝mysql第三方模塊
    npm install mysql
  4. 使用mysql模塊連接mysql數據庫
    mysql.createConnection() 普通連接
    //普通連接
    //引入mysql模塊
    const mysql=require('mysql');
    //創建連接對象
    const connection=mysql.createConnection({
        host:'127.0.0.1',
        port:'3306',
        user:'root',
        password:'',
        database:'tedu'//連接後要進入的數據庫
    });
    //執行連接
    connection.connect();
    //執行sql命令
    //參數1:執行的命令
    //參數2:獲取sql命令的執行結果
    connection.query('select * from emp;',function(err,result){
        //err可能產生的錯誤
        if(err)throw err;
        //result執行的結果
        console.log(result);
    });
    
    mysql.createPool() 連接池(推薦)
    //連接池連接
    //引入mysql模塊
    const mysql=require('mysql');
    //創建連接池對象
    const pool=mysql.createPool({
        host:'127.0.0.1',
        port:'3306',
        user:'root',
        password:'',
        database:'tedu',
        connectionLimit:'15'//設置連接池的大小,默認也是15
    });
    
  5. 執行sql語句
    pool.query(sql,arr,callback)
    sql:要執行的sql語句
    arr:要過濾的數據,會替換sql語句中佔位符(?)
    callback:回調函數,用於獲取sql語句的結果
    err:可能出現的錯誤
    result:sql語句的結果
    //執行sql語句,會自動建立連接
    //sql注入,用戶在提供的數據中加入了sql命令
    //如何避免:過濾用戶提供的數據[arr]就是過濾,然後在傳到(?)佔位符處
    //練習:創建對象,修改對象中提供的列
    let emp={
        ename:'jin',
        birthday:'1900-1-1',
        salary:999999,
        eid:16
    };
    pool.query('update emp set ? where eid=?',[emp,emp.eid],(err,result)=>{
        if(err)throw err;
        console.log(result);
    });
    

    練習:查詢是否登錄成功,到數據庫查詢有沒有用戶名和密碼同時匹配的數據,如果有,登錄成功
    練習:創建web服務器,託管靜態資源到public目錄下, 包含文件add.html(添加部門操作),想服務器發送請求(get /add);創建對應的路由,在路由中獲取傳遞的數據,把數據插入到tedu數據庫下的dept表中。如果插入成功,響應‘部門添加成功’
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章