express

express

  • 1.創建方式

    • (1)導入express模塊
    var express=require('express');
    • (2) 調用方法,返回app
    var app=express();
    • (3)端口監聽 最後執行
    app.listen(55555);//異步
  • 2.定義方式
    • 根據不同的客戶端請求,返回不同的響應
  • 3.app上的方法(app本質:請求監聽函數)

    • get

      app.get('/',function (req, res) {//客戶端通過get方發訪問路由上的時候,會交由對應的回調函數處理
      res.end('首頁')
      });
    • head
    • delete
    • post
    • put
    • app.all(‘*’)匹配所有的方法名 匹配所有路徑
    app.all('*',function (req, res) {
    res.end('此頁面不存在')
    });
  • 4.詳細信息的獲取

    原理:
    var urlObj=require(‘url’).parse(req.url,true);
    req.path=urlObj.path;
    req.query=urlObj.query;

    • req.method 請求方法
    • req.url 請求URL
    • req.path 請求路徑// pathname /food
    • req.header 請求頭對象
    • req.query 獲取查詢字符串
    • req.params 獲取請求URL中的參數值

      var express=require('express');
      var app=express();
      app.get('/users/:id',function (req, res) {
      var values=res.headers.host.split(':');
      console.log(values[0]);
      console.log(values[1]||80);
      console.log(res.headers.host);
      res.end('ok');
      });
      app.listen('8787',function () {
      console.log('8787');
      });
  • 5.中間件

    • 中間件都是函數,都需要調用,是爲了傳參(需要參數的原因:靈活傳參 不用固定)
    • (1.)使用
    var express=require('express');
    var app=express();
    app.use(function (req,res) {});
    app.listen(3200);
    • (2)參數
      • 參數1:req
      • 參數2:res
      • 參數3:next -》函數 調用表示繼續向下執行
    • (3)特點
      • 一般放在路由之前
      • 可能有異步代碼
    解決方式
    通過setTimeOut(function(){
      next() //等異步執行完執行next()
    })
    • (4)作用
      • 添加公共處理器
      • 給請求或響應對象上增加公有的方法和屬性 req.path
    • (5)亂碼處理
    app.use(function (req,res,next) {
    res.setHeader('content-type','text/plain;charset=utf8');//dbf 是亂碼
    setTimeout(function () {
        next();
    });
    });
  • 6.路由中間件

    • 根據不同請求實現不同的功能
    • 根據不同的路徑請求開頭分別交由各自所屬範圍進行執行
    • 引用 創建 執行 發送
    user.js
     var express=require('express');
     var router=express.Router();
     router.get('/signup',function(req,res){})
     module.exports=router
     路由中間件部分
    var express=require('express');
    var app=express();
    var user=require('./router/user');
    var article=require('./router/article');
    /*用戶  /user/sginup    */
    /*當請求的URL路徑是以user開頭的話,會交由 */
    app.use('/user',user);
    app.use('/article',article);
    app.listen(7979);
  • 7.send( )

    • 特點:對傳入的數據沒有格式限制

    1. 當參數爲一個String時,Content­Type默認設置爲”text/html”
    2. 當參數爲Array或Object時,Express會返回一個JSON
    3. 當參數爲一個Number時,並且沒有上面提到的任何一條在響應體裏,Express會幫你
      設置一個響應體,比如:200會返回字符”OK”
  • 8.static(靜態文件中間件)

    • 參數 :靜態文件根目錄
    • 查找執行方式
      • (1)在根目錄下查找,找到則返回
    直接從public文件之下開始查找,會返回一個函數
    方式一: app.use(express.static(path.join(__dirname,'public')));
    
    方式二:(1)app.use(express.static(path.resolve('public')));   //-》不寫/user,是全部都可以2)app.use('/user',express.static(path.resolve('public')));   //-》只有滿足/user前綴纔可以匹配
    • 根目錄下找不到 next向下執行
    代碼原理:
    function static(root) {
    //返回一箇中間件函數
    return function (req, res, next) {
        //靜態文件根目錄+客戶端請求路徑
     var filename=path.join(root,req.path);
        fs.exists(filename,function (exist) {
            if(exist){
                res.sendFile(filename);//發送文件給客戶端
            }else{
                next();
            }
        })
    }
    }
  • 9.tmpl(模板)

    • 安裝 npm install ejs
    • A.特點
      • (1)設置模板引擎相當於設置變量,通過app.get獲取 <%= %>相當於把值放進去
      • (2)MVC架構中,模板引擎包含在服務器端
    • B.模板渲染賦值的方式

      • 真正進行模板渲染時,會將所有內容拷貝則res.locals上,然後利用res.locals進行真正的渲染
        方式一:
        res.render('user',{users:users,title:'name'})
        方式二:res.locals.title='name'
        
    • C.詳細解讀

      • 1.參數:

      參數1:views 模板相對路徑(相當於模板存放的根目錄)
      參數2:數據對象(對象中的屬性可以作爲模板中的JS變量)

    • 2.使用ejs模板
  •    //  指定渲染模板文件的後綴名爲ejs
         app.set('view engine','ejs');
         app.set('views',path.join(__dirname,'view'));
         res.render('index');
       修改模板文件的後綴名未HTML
           app.set('view engine','html');
         //運行ejs模板app.set('views',path.join(__dirname,'views'));
         res.render('index');
    • D.模板引擎

      • 設置模板存放根目錄(views是固定不變的)

        app.set('views',path.resolve('xx'));
      • (1)引用user.ejs文件進行模板渲染

        app.set('view engine','ejs');//ejs-》指定的文件擴展名
        • (2)引用HTML,以ejs進行渲染
        app.engine('html',require('ejs').__express);//模板後綴是HTML的話用ejs的渲染方法進行渲染
      • 注意點

        ejs<%%>中的內容,必須要在tmpl.js中存在

        html中:  <title><%= title %></title>
        js中: res.render('user',{users,title:'name'})
    • 10.body-parser中間件

      • 用於解析客戶端請求的body中的內容,內部使用JSON編碼處理,URL編碼處理及對於wenjian
      • 獲取請求體字符串轉化城對象賦給req.body

        true:querystring    false :qs
        app.use(bodyParser.urlencoded({extended:true}));
        • 11.頁面跳轉
        • res.redirect(‘路徑’)
        • location
      ** 要傳參
      res.setHeader('Location','/signin');
    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章