美文网首页
学习Express框架

学习Express框架

作者: Carmen_e69d | 来源:发表于2019-05-08 19:04 被阅读0次

    Express 框架

    Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

    使用 Express 可以快速地搭建一个完整功能的网站。

    Express 框架核心特性:

    • 可以设置中间件来响应 HTTP 请求。

    • 定义了路由表用于执行不同的 HTTP 请求动作。

    • 可以通过向模板传递参数来动态渲染 HTML 页面。

    安装

    在安装了Node.js前提下,在应用中通过npm init命令创建一个package.json文件,在该目录下安装Express并将其保存到以来列表中。

     npm install express --save
    
    

    Express 应用程序生成器

    通过应用生成器工具express-generator快速创建一个应用的骨架,其包含了express命令行工具。

    npm install express-generator -g
    
    

    通过生成器创建的应用一半都有如下目录结构:

    .
    ├── app.js
    ├── bin
    │   └── www
    ├── package.json
    ├── public
    │   ├── images
    │   ├── javascripts
    │   └── stylesheets
    │       └── style.css
    ├── routes
    │   ├── index.js
    │   └── users.js
    └── views
        ├── error.pug
        ├── index.pug
        └── layout.pug
    
    7 directories, 9 files
    
    

    路由

    指确定应用程序如何响应对特定端点的客户端请求(url和特定http请求方法)。

    每个路由可以有一或多个在路由匹配时执行的处理函数HANDLER。

    express.METHOD(PATH,HANDLER)
    
    

    例如

    app.get()
    app.post()
    app.all() //可处理所有HTTP方法
    app.use() 
    //将特定的中间件指定为回调函数 其中的回调函数可以是router对象
    
    

    详细METHOD请查看app.METHOD

    路由路径(Route paths)

    • 字符串类型

      app.get('/',function(req,res){
      
      })
      //根路径
      app.get('/something',function(req,res){
      
      })
      
      
    • 字符串模式

      app.get('/ab?cd',function(req,res){
          //会匹配abc/abd
      })
      app.get('/ab*cd',function(req,res){
          //会匹配abcdcd
      })
      
      
    • 正则表达式模式

      app.get('/a/',function(req,res){ 
      //匹配任何有"a"的字符串 
      })
      
      

    路由参数(Route parameters)

    用于捕获URL中的值,这些值存在一个req.params的对象中,各值在路由中的名字指定为各自的键名。

    其中路由参数可设置为正则表达式,-.

    Route path: /flights/:from-:to
    Request URL: http://localhost:3000/flights/LAX-SFO
    req.params: { "from": "LAX", "to": "SFO" }
    
    //
    
    Route path: /user/:userId(\d+)
    
    Request URL: http://localhost:3000/user/42
    
    req.params: {"userId": "42"}
    
    

    路由回调函数(Route handlers)

    回调函数含有三个参数:reqresnext

    注意:回调函数可能会使用next('route')绕过该路由下其他的回调函数跳到下个路由。

    当有多个回调函数时,有以下的几种表示方法。

    app.get('/',function(req,res,next){
        next()
    },function(req,res){
        res.send('B')
    })
    
    //
    
    let a=function(req,res,next){
        next()
    }
    let b=function(req,res,next){
        next()
    }
    app.get('/',[a,b],function(req,res,next){
        next()
    })
    
    

    请求

    方法名 作用
    req.app 当callback为外部文件时,用req.app访问express的实例
    req.baseUrl 获取路由当前安装的URL路径
    req.body 请求主体
    req.params 获取路由参数
    req.path 获取请求路径
    req.protocol 获取协议类型
    req.query 获取url的查询参数串
    req.get() 获取指定的HTTP请求头

    响应

    方法名 作用
    res.download() 提示下载一个文件
    res.end() 终止响应进程
    res.json() 发送json类型响应
    res.jsonp() 发送一个支持JSONP的JSON响应
    res.redirect() 重定向一个请求
    res.render() 渲染视图模板
    res.send() 发送各种各样类型的响应
    res.sendFile() 发送一个八位字节流的文件
    res.sendStatus() 设置状态码,在响应体中包含状态码的字符串表示

    express.Router

    Router实例是一个完整的中间件和路由系统。

    文件名为birds.js

    var express = require('express')
    var router=express.Rounter()
    
    // define home page route
    router.get('/',function(req,res){
        res.send('something')
    })
    module.exports=router
    
    

    将该router模块加载:

    var birds=require('./birds')
    //...
    app.use('/birds',birds);
    
    

    中间件

    中间件是对用户请求进行过滤和预处理的东西,它一般不会直接对客户端进行响应,而是将处理之后的结果传递下去。

    中间件函数能够访问请求对象、相应对象和应用程序的请求/响应循环中的下一个中间件函数。

    中间件函数能够执行以下的任务:

    • 执行任何代码

    • 改变请求和响应对象

    • 停止请求-响应循环

    • 调用堆栈中的下一个中间件函数。

    如果当前中间件函数没有结束/响应循环,必须调用next()

    整个中间件执行过程是一个洋葱模型。

    image

    编写中间件

    var express=require('express')
    var app=express();
    
    var requestTime=function(req,res,next){
        req.requestTime=Date.now()
        next()
    })//中间件
    
    app.use(requestTime);//使用
    
    

    使用中间件

    应用层中间件

    使用app.use()app.METHOD函数将应用层中间件绑定到应用程序对象的实例。

    app.use('/user/:id',function(req,res,next){
        next();
    })
    
    
    路由层中间件

    绑定到express.Router()的实例

    var app=express();
    var router=express.Router();
    
    router.use(function(req,res,next){
        next();
    })//所有请求都会执行该路由
    
    app.use('/',router);
    
    
    错误处理中间件

    始终采用四个自变量。必须提供四个自变量,以将函数标识为错误处理中间件函数。注意:即使无需使用next,也必须指定该对象以保持特征符的有效性。

    app.use(function(err,req,res,next){
        console.log(err.stack);
        res.status(500).send('Somthing broke!')
    })
    
    
    内置中间件

    express.static(root,[options])是Express中唯一内置的中间件函数,负责提供Express应用程序的静态资源。

    root自变量指定从其中提供静态资源的根目录

    let options ={
        index:false;
        redirect:false;
        setHeaders:function(res,path,stat){
            res.set('x-timestamp',Date.now())
        }
    }//options对象的属性
    
    app.use(express.static('public'),options));
    //可以有多个静态目录
    
    
    第三方中间件

    使用第三方中间件向 Express 应用程序添加功能。安装其具有所需功能的node.js模块,然后再加入。

    详情查阅:Third-party middleward

    相关文章

      网友评论

          本文标题:学习Express框架

          本文链接:https://www.haomeiwen.com/subject/ruwvoqtx.html