express

一、express介紹:html

  Express是簡介靈活的nodeJs web應用開發框架node

  它提供了一系列強大的功能:路由控制、參數獲取、中間件、send和sendFie、web

                 靜態文件服務器、模板解析、重定向express

二、使用express:npm

  安裝:npm install expressjson

  三步驟:數組

    var express = require("express");服務器

    var app = express();cookie

    app.listen(8080);app

三、路由:

  get請求:   app.get( '/', function( req, res ){  res.end("首頁") })

      -- request:   請求對象 獲取客戶端的請求

      -- response:   響應對象 向客戶端發送響應

      -- ren.end()   只能放字符串+buffer,

      -- ren.send()  能接任何類型的參數  

  app.all: app.all("*",function( req, res ){  res.end("此頁面不存在")  })

      --  all匹配全部的方法名,  * 代碼匹配全部的路徑

 

/* 用戶:  user/signup 登陸         user/signin   註冊         user/sigout  退出
文章: article/add 添加文章 article/list 文章列表 */

  

    

    

 

 四、獲取請求參數:

  app.get("/food",function (req,res) {
     console.log( req.method ); //請求方法
     console.log( req.url ); //請求的url
     console.log( req.path ); //pathname /food
     console.log( req.query ); //查詢字符串對象
     console.log( req.headers ); //請求頭對象
    res.end();
  });

  params路徑參數:"/user/:id/:name"

  app.get("/user/:id/:name" , function(){

    console.log( req.params.id );    //動態傳遞id,根據id獲取相關內容

    console.log( req.params.name );

    console.log( req.params.host );

    //獲取端口號+域名

    console.log( req.headers );  //整個頭部信息

    console.log( req.headers.host );  //獲取端口號+域名,單獨獲取只須要分割一下。

  })

   例子:

    

 

五、中間件 - use:

    use的做用:一、添加公共的處理邏輯。 二、給請求或響應對象上增長公用的方法和屬性 req.path

    app.use('/',function( req, res, next ){

      //中間件自己也是一個函數

      //next  是一個函數,調用它表示向下執行,  不調用會直接卡在此處或者直接結束

    })

 

六、靜態文件 public

  -- public:參數是靜態文件根目錄
  -- path.join( __dirname, 'public' ) 當前文件的絕對路徑
  -- path.resolve('public') 與上相等,找到public的絕對路徑
  -- 此中間件先會去靜態目錄下找,找到直接返回,未找到,next向下執行看有沒有路由能執行
  app.use( express.static( path.resolve('public') ) );         //匹配全部
  app.use('/user', express.static( path.resolve('public') ) );     //匹配user

  設置模板引擎

  app.set('view engine','html'); // ejs html設置模板引擎,就至關於設置了一個變量,用get讀

  app.set('views',path.resolve('views') ); //設置模板存放的根目錄 前:key 後:目錄

  app.engine('html',require('ejs').__express ); //若是模板後綴是html的話 用ejs的方法渲染來進行     ejs須要安裝

   -- 多個模板都會用到的變量,並且變量值都同樣的狀況下 ,能夠提取出來寫

   app.use(function (req,res,next) {
    res.locals.title = "title";
    next();
   });

   app.get('/users',function (req,res,next) {   // get 配置路由 + 獲取變量
      res.locals.users = users ;    //真正渲染的時候,會把數據對象的屬性所有拷貝給 res.locals
      res.render( 'user.html',{ users:users , title:"title" } );  // 1參:相對路徑,相對於views的 2參:數據對象

      //渲染視圖,只能寫至關於路徑 後綴可略
      //res.render( 'user' );
   });

 

  解析json:

  -- body-parser   須要安裝; npm  install  body-parser

  var bodyParser = require('body-parser');    //解析json

  --當請求體的類型是urlencoded格式的話,用此中間件請求體轉成對象

  --url只能放ascii,128個,若是傳中文,要將中文轉ascii使用 encodeURIComponent('中文');

  app.use( bodyParser.urlencoded( {extended:true} ) );  //解析設置  提交表單的時候

  app.use( bodyParser.json() );            

 

  eg:

    var express = require("express");
    var path = require("path");
    var bodyParser = require("body-parser"); //解析json
    var cookieParser = require('cookie-parser'); //cookie-parser
    var app = express();

    app.use( cookieParser() ); //使用cookieParser中間件只會 會增長req.cookies屬性
    app.use( bodyParser.urlencoded( { extended:true }) ); //解析設置
    app.use( bodyParser.json() );

    app.set('view engine','html');
    app.set("views",path.resolve('views'));
    app.engine('html',require('ejs').__express ); //解析html中的ejs

    var users =[];
    /*---------------------註冊--------------------*/
    app.get('/signup',function (req,res) {
     var error = req.cookies.error;
     res.clearCookie('error'); //清除cookies
     res.render('up',{ error });
    });
    app.post('/signup',function (req,res,next) {
     var user = req.body;
     //找一下用戶數組中有沒有相同用戶名的用戶
     var oldUser = users.find(function ( item ) {
     return item.username == user.username;
     });
     if(oldUser){ //找到了用戶名,跳到註冊頁重寫
     res.cookie('error','此用戶名已經被佔用');
     res.redirect('back');      }else {      //沒找到就註冊,而且跳到登錄頁面      users.push( user );      res.redirect('/signin')      }    });    /*-------------------登錄----------------------*/    app.get('/signin',function (req,res) {     var error = req.cookies.error;     res.clearCookie('error'); //清除cookies     res.render('in');    });    app.post('/signin',function (req,res,next) {     var user = req.body;     var flag = users.find(function ( item ) {      return user.username == item.username && user.password == item.password      });      if( flag ){      res.cookie('yes','登錄成功...');      res.redirect('/welcome')      }else {      res.cookie('error','用戶名密碼錯誤'); //error會覆蓋上面的error      res.redirect('back');      }      });    app.get('/welcome',function (req,res,next) {     var yes = req.cookies.yes;      res.render('welcome',{ yes })    })    app.listen(9090);
相關文章
相關標籤/搜索