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 %>
        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');

    你可能感兴趣的:(node-js)