Express第三方模块详细使用

介绍

 express官网:https://www.expressjs.com.cn/
 ​
 Express是一个基于node.js的极简、灵活的web应用开发框架。可以快速搭建一个完整功能的网站。Express的作用于node.js中的内置的http模块类似,都是用来创建web服务的。但是http模块使用起来比较繁琐。开发效率低,Express是基于http模块封装出来的,能够极大的提高开发效率。
 ​
 http与Express的关系:JavaScript原生操作DOM 与 JQuery的关系。

使用

安装Express

在项目的根目录下,输入【npm init】初始化,因为之后打包也要用所以放到生产依赖。

运行

 npm i express -S

创建服务器

 const express = require("express")
 //创建服务
 let app = express();
 ​
 //创建路由
 app.get("/",(req,res)=>{
   res.send("Hello,world!")
 })
 ​
 //监听端口 3000 服务器启动提示
 app.listen(3000,()=>{console.log("服务器已启动");})

路由

什么是路由

     路由就是网址,web服务器会根据用户输入的不同 **路径** 、 **请求方式** ,响应不同的页面。
 ​
     http常见的请求方式:post(添加),get(获取)put(更新)delete(删除)
 ​
     匹配规则:每当一个请求到达服务器后,需要经过路由的匹配。匹配请求地址和请求方式,匹配成功后,才会调用对应的处理函数。

基本格式

路由的组成:请求地址+请求方式。

 app.method(path,handler)
 //method:请求方式
 //path:请求路径
 //handler:请求的处理函数

模块化路由

为了方便对路由进行管理,Express不建议我们将所有的路由都罗列在一个文件中。

我们可以将路由分类,将同一类的路由抽离为一个模块。步骤如下:

  1. 创建路由模块对应的js文件

  2. 调用express.Rotuer()方法创建路由对象。

  3. 在路由对象上挂载具体的路由。

  4. 使用module.exprots导出路由对象

  5. 在app.js中使用app.use方法来注册路由模块。

案例:订单路由:order.js文件如下

 const express = require("express");
 /**
  * 订单路由模块
  */
 // 2.调用express.Rotuer()方法创建路由对象。
 const order = express.Router();
 ​
 //3.在路由对象上挂载具体的路由。
 order.post("/order/add",(req,res)=> res.send("新增了一个订单"));
 order.post("/order/edit",(req,res)=> res.send("修改了订单信息"));
 order.post("/order/del",(req,res)=> res.send("删除了一个订单"));
 order.get("/order/list",(req,res)=> res.send("查询所有的订单信息"));
 ​
 //4.使用module.exprots导出路由对象
 module.exports = order;

app.js文件如下

 //在app.js中使用app.use方法来注册路由模块。
 app.use(require("./order"));

路由中正则使用

 const express = require('express');
 const app = express()
 ​
 //路径正则   ?  +  *  ()  $
 //           .   任意字符(除了换行和终止符)
 //Express中路径字符串支持正则
 ​
 // app.get('/a',(req,res)=>{
 //     res.send("ok a")
 // })
 ​
 // ?   出现0或1次       /abcd    /acd
 // app.get("/ab?cd",(req,res)=>{
 //     res.send("abcd")
 // })
 ​
 //  /acd   /abcd   /abc   /ac
 app.get("/ab?cd?",(req,res)=>{
     res.send("abcd")
 })
 ​
 ​
 // +  一次或者多次
 app.get('/xy+',(req,res)=>{
     res.send('xy')
 })
 ​
 // *   任意个字符
 app.get('/m*n',(req,res)=>{
     res.send("mn 哈哈哈")
 })
 ​
 // ()  作为一个整体
 // app.get("/e(fg)?h",(req,res)=>{
 //     res.send('测试')
 // })
 ​
 ​
 app.get("/e(fg)+h",(req,res)=>{
     res.send('测试11')
 })
 ​
 ​
 ​
 app.listen(3000, () => {
     console.log('run...........');
 })

获取参数

获取get参数

通过req.query即可获取get参数。 req.query是一个对象,包含所有的get参数。

 //请求地址:http://localhost:3000/list?page=2&pageSize=3
 ​
 //分页查询  默认一页显示3条数据
 app.get("/list",(req,res)=>{
   //解构赋值
   let {page,pageSize} = req.query;   //req.query 是一个对象
   res.send(page,pageSize);
 })

获取post参数

需要先对post参数进行解析配置,然后通过req.body来获取post参数

 app.use(express.urlencoded({extended:false}));
 //接受post请求。
 app.post("/add",(req,res)=>{
     //req.body获取post参数
     res.send(req.body)
 })

获取动态参数

通过req.params对象来获取动态参数

 //动态参数  请求地址: http://127.0.0.1:3000/video/456/hewangle
 app.get("/video/:id/:name",(req,res)=>{
   res.send(req.params);
 })

中间件 (拦截器)

中间件:处理http请求的函数,做接收到请求和发生响应中间的一系列操作。多个中间件之间,共享同一份req和res。

  *  注意(老师讲的):
  *    1.一般要在路由之前注册中间件 (挨打)
  *    2.客户端(浏览器)发生来的请求,可以连续调用多个中间件。
  *    3.执行完成中间件的代码后,千万千万不要忘记next  (挨打)
  *    4.不要在next之后写代码。  (挨打)

两种注册方式:

 app.use()     会匹配所有的请求方式和请求路径。
 app.method()  method 请求方式。== 路由

中间件的格式:

 app.use("路径",(req,res,next)=>{
     //中间件的处理。
     //将控制权交给下一个中间件或路由
     next();
 },(req,res,next)=>{
     //中间处理
 })
 ​
 即  app.use("路径",fun1(),fun2(),fun3()……)

中间件的分类:

  • 内置中间价 内置中间件 static 又叫静态资源目录

     app.use(express.static(__dirname,"public"))
     ​
     [注意:]   Express在指定的静态目录中查找文件,并对外提供资源的访问路径。因此,存放文件的目录名不会出现在URL中。
  • 第三方中间件

  • 自定义中间件

全局自定义中间件 可以实现全局拦截

 add.use('/',(req,res,next)={
     中间处理函数
 next(); //标记是否将控制权交给下一个中间件或路由
 })
 [注意:]
     1、尽量不要在next之后写代码  (虽然可以执行但是容易挨打)
     2、第一个参数可以省略;省略后就默认是--会匹配所有的请求方式和请求路径

局部自定义中间件 可以实现局部拦截

 add.method("路径",(req,res,next)={})
 add.use("路径",(req,res,next)={})
 ​
 局部中间件:多了一个路径的参数
 局部中间件是 在哪个接口里写就只对哪个接口有用,局部中间件可以写无数个 只要在合适的地方使用next()就可以一个接一个的往下执行,一般情况下使用局部中间件最多使用一两个就够了 使用多个局部中间件 

中间件的执行顺序

     1、按照中间件的书写顺序依次向下执行 (会进行路径的匹配)
 ​
     2、遇到res.send()就在页面输出,同时不会再向下游执行了、反而开始向上游执行
 ​
     3、每一个中间件的next() 上边的是向下游时的执行代码、下边的是向上游时的执行代码

项目生成器

 express-generator 是 express 应用生成器,可以快速生成一个应用的骨架
 通过 express demo -e 命令可以快速生成一个项目架构 (-e 是参数, 表示添加 ejs 引擎支持)
 ​
 ​
 全局安装
 npm i express express-generator -g 
 ​
 创建项目
 express demo -e 
 ​
 安装依赖
 cd demo 
 npm install
 ​
 启动
 npm start
 ​
 文件目录:
     bin/www        是整个项目的启动文件
     public/        存放静态资源
     routes/        路由配置文件
     views/         视图
     app.js         服务文件
     package.json   项目配置文件

 特别注意:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值