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);
相关文章
相关标签/搜索