express复习大纲

express复习

  • express 三步走
    • 引入express (需要下载 api地址-》npm)
      1. 下载 
        npm i --save-dev express
      2. 引入
        const express=require('express')
    
    • 启动服务
      const app=express();
    
    • 监听服务
      app.listen(8080)
    
  • express 强大的路由

1、路由可以通过正则进行匹配,用()进行分组,通过req.params[0]来获取对应的参数,也可以通过node自带的正则进行匹配
2、当匹配到第一个路由时下面的路由就不会再走了,如果想要走下面的路由需要在路由里面加上next();
3、路由的排序:两种顺序都不会影响下边路由执行
1)将不可变的路由放在上边,可变的放在下面,
2)将可变的路由放在上面,但是要在里面进行判断else 里面写next();因为send()后面不能写任何东西,会报错

  • get

    1. 三种路由状态
       // 学生学好
       app.get('/',(req,res)=>{})
       app.get(/\student\/(\d{4})/,(req,res)=>{
        console.log(req.params[0])
        
       })
       //老师工号
       app.get('/teacher/:gonghao',(req,res)=>{
        console.log(req.params.gonghao)
        
       })
      //某个人工号
      app.get(':/username/:id',(req,res)=>{
       console.log(req.params.id)
       
      })
    
    1. 路由顺序1:将不可变的路由放在上边,可变的放在下面
      //特殊用户
      app.get(/admin/login,(req,res)=>{
    
       })
       
      //普通用户       
      app.get(':/username/:password',(req,res)=>{
      
      })
    
    
    
    1. 路由顺序2:将可变的路由放在上面,但是要在里面进行判断else 里面写next();
      let  putong={
        "teacher":["teacher1","teacher2"],
        "student":12
      }
      //普通用户
      app.get(':/username/:password',(req,res,next)=>{
      //先到数据库中查,如果有就是普通用户,没有next()
       let username=req.params.username
       if(putong[username]){
        res.send('普通用户')
       }else{
        next()
       }
      })
      //特殊用户
      app.get(/admin/login,(req,res)=>{
        console.log(req.params[0])
       })
    
       
    
    
  • post

       app.post(路由,(req,res)=>{})
    
  • use

       app.use(路由,(req,res)=>{})
    
    
  • express中的请求与原生node请求参数的获取

    • get请求

      1. express中get请求获取地址栏中的参数 通过 req.query
          app.get(路由,(req,res)=>{
            res.send('send里面既可以json字符串或对象或者buffer')
            console.log(req.query.xxx) //获取地址栏参数
          })
      
      1. 原生node中get请求 获取地址栏参数 通过url.parse
          1)、const url = require('url')
          2)、url.parse(req.url,true).query
            
      
    • post请求

      1. express中 post请求 获取参数需要通过 bodyParser
          const bodyParser = require('body-parser')
          app.use(bodyParser.urlencoded({extended:false}))
          app.post(路由,(req,res)=>{
            res.send('send里面既可以传字符串或json对象或者buffer')
          });
      

      注意:如果请求的是大型文件(音频、视、图片、word)还是需要formidables模块,普通数据是可以用body-parser
      body-parser三步曲:
      1). 引入模块:bodyParser=rquire('body-parser')
      2). app.use(bodyParser.urlencoded({extended:false}))
      3). 通过req.query.xxx 拿到前端通过请求体提交的数据

      1. 原生node 中post 请求接收参数
           let str='';
          1)、req.on('data',(data)=>{
            str+=data;
          }) 
          2)、req.on('end',()=>{
            //将拼接好的字符串转成对象;这里的querystring同样需要require进来
            let bodyParser=querystring.parse(str)
            res.end()
          })
                  
      
  • express + ejs

    • 设置模版引擎
      1. 下载ejs 
      npm i --save-dev ejs
      app.set('view engine','ejs')
    
    
    • 当请求某个页面时,开始渲染页面
       //后台
       app.get('/book', (req, res) => {
         let yundong = [
           {name: "健身", des: "修身"},
           {name: "游泳", des: "好身材"},
           {name: "跑步", des: "瘦腿"}
         ];
         res.render('book', {
           yundong//这个名字必须和静态页面名字相同
         })
       //前端
       <% for(var i=0;i<yundong.length;i++){%>
       <li>我喜欢的运动是<%= yundong[i].name%>;<%= yundong[i].des%></li>
       <%}%>
    

    注意: 1、虽然express中可以不用引入ejs模版,但是必须要在当前项目中下载ejs 模块,否则会报错;
    2、 For循环,条件语句直接用<%%>;如果具体复制,必须要等号<%=%>

  • send

    • send与原生node中end的区别
      • send里面既可以传字符串或json对象或者buffer
      • send比end用法更加强大
    • send与render的区别
      • send一般用来做测试,render一般用来做渲染页面
      • send一般可以配合状态码输出:res.status('404').send('文件没找到')
  • 设置文档类型

    • 原生node通过res.writeHeader(200,'Content-Type':'text/html;charset=UTF-8')
    • express中通过res.set('Content-Type','text/html')
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,242评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,953评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,299评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,709评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,723评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,236评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,629评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,594评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,135评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,156评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,285评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,914评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,600评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,073评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,203评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,798评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,339评论 2 365