nodejs之express的中间件
2019-08-14 10:14:22来源:博客园 阅读 ()
express中间件分成三种
内置中间件 static
const express = require("express"); const app = express(); // test1接口 app.get("/test1",(req,res) => { res.send("test1 ok") }) // test2接口 app.get("/test2",(req,res) => { res.send("test2 ok") }) // 开启服务器 app.listen(2000,() => { console.log('开启在2000端口'); })
const express = require("express"); const app = express(); app.use("/",(req,res,next)=>{ console.log("中间件") }) // test1接口 app.get("/test1",(req,res) => { console.log('test1'); res.send("test1 ok") }) // test2接口 app.get("/test2",(req,res) => { console.log('test2'); res.send("test2 ok") }) // 开启服务器 app.listen(2000,() => { console.log('开启在2000端口'); })
现在在浏览器中请求/test1 没有响应,在终端中打印出来
这个中间件的作用在于 请求/开头的路径时 优先走中间件的回调函数 中间件里的next()表示是否继续往下执行 ,有next()就继续往下走, 没有next()就不往下走
const express = require("express"); const app = express(); app.use("/",(req,res,next)=>{ console.log("中间件") next() // 是否继续往下执行 }) // test1接口 app.get("/test1",(req,res) => { console.log('test1'); res.send("test1 ok") }) // test2接口 app.get("/test2",(req,res) => { console.log('test2'); res.send("test2 ok") }) // 开启服务器 app.listen(2000,() => { console.log('开启在2000端口'); })
页面中
终端打印
简单来说 在来到/test1接口之前 有个拦截器,这个拦截器中的路径是/, 所有的接口都先走这个拦截器,在这个拦截器里做逻辑处理,允许它继续往下走就加next() ,不允许往下走就不用加next(), 因此验证上文提到的token,就可以在中间件里进行
const express = require("express"); const app = express(); app.use("/",(req,res,next)=>{ console.log("中间件") let {token} = req.query; if(token){ next() // 是否继续往下执行 }else{ res.send("缺少token") } }) // test1接口 app.get("/test1",(req,res) => { console.log('test1'); res.send(`test1 token为${req.query.token}`) }) // test2接口 app.get("/test2",(req,res) => { console.log('test2'); res.send(`test2 token为${req.query.token}`) }) // 开启服务器 app.listen(2000,() => { console.log('开启在2000端口'); })
浏览器中访问/test1 不带token字段
现在带上token字段访问/test2
这就实现了通过中间件做全局拦截,这种中间件属于自定义拦截器.如果app.use()的第一个参数是 / 表示路径,则第一个参数可以不写,如下
app.use("/",(req,res,next)=>{ next() // 是否继续往下执行 })
等同于
app.use((req,res,next)=>{ next() // 是否继续往下执行 })
这也可以说为什么body-parser是一个中间件
const bodyParser = require("body-parser"); app.use(bodyParser.urlencoded({extended:false})) app.use(bodyParser.json())
const express = require("express"); const app = express(); app.get("/demo",(req,res,next) => { console.log('fun1'); },(req,res) => { console.log('fun2'); }) // 开启服务器 app.listen(2000,() => { console.log('开启在2000端口'); })
在第一个回调函数中加上next()看看
const express = require("express"); const app = express(); app.get("/demo",(req,res,next) => { console.log('fun1'); next() },(req,res) => { res.send("fun2") console.log('fun2'); }) // 开启服务器 app.listen(2000,() => { console.log('开启在2000端口'); })
浏览器中访问/demo
终端打印
这种叫局部中间件,局部中间件是 在哪个接口里写就只对哪个接口有用,局部中间件可以写无数个 只要在合适的地方使用next()就可以一个接一个的往下执行,一般情况下使用局部中间件最多使用一两个就够了 使用多个局部中间件 代码结构如下
app.get("/test",fun1,fun2,fun3,fun4,fun5..)
app.use(express.static("./public"))
在public目录下新建一个index.html文件 写上内容
浏览器访问/index.html
app.use("/",express.static("./public"))
app.use("/public/test/",express.static("./public"))
浏览器访问时应该输/public/test/index.html了
原文链接:https://www.cnblogs.com/easth/p/express_middlewear.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:js中获取当前url路径
下一篇:Vue-创建项目
- nodejs中如何使用async模块 2020-02-22
- nodejs的express自动生成项目框架的方法 2020-02-20
- 分享connect中间件session、cookie的使用方法 2019-12-10
- 分享nodejs分页类代码 2019-12-02
- 七天学会NodeJS——第一天 2019-08-14
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash