node.js (三) express中间件

express静态资源托管

1.导入express模块

 const express = require("express");

2.创建服务器

const app = express();

3.静态资源托管

 app.use(express.static('public'));
 app.use(express.static('static'));

4.开启监听

 app.listen(4399);

5 路由的使用

// 导入express模块
const express = require("express");

const querystring = require("querystring");

// 创建服务器
const app = express();

// get请求数据  express已经封装好了解析的方法  点query出来的就已经是对象
app.get("/search", (req,res) => {
    console.log(req);
    console.log(req.query);
    res.send("/search");
})

app.post("/add", (req, res) => {
    // 使用get的方式获取参数  获取不到 因为他不是在url传数据
    // console.log(req);
    // console.log(req.query);

    var str = "";

    req.on("data", data => {
        str += data;
    })

    req.on("end", () => {
        console.log(str);
        var data = querystring.parse(str);
        console.log(data);
    })

    res.send("/add");
})


// 开启监听
app.listen(8848);
1

Express中间件

Express 是一个自身功能极简,完全是由路由和中间件构成一个的 web 开发框架,从本质上来说,一个 Express 应用就是在调用各种中间件。

中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。

中间件的功能包括:

(1). 执行任何代码。

(2). 修改请求和响应对象。

(3). 终结请求-响应循环。

(4). 调用堆栈中的下一个中间件。

如果当前中间件没有终结请求-响应循环,则必须调用 next() 方法将控制权交给下一个中间件,否则请求就会挂起。

Express 应用可使用如下几种中间件:

(1). 应用级中间件

(2). 路由级中间件

(3). 错误处理中间件

(4). 内置中间件

(5). 第三方中间件

使用可选则挂载路径,可在应用级别或路由级别装载中间件,另外,你还可以同时装在一系列中间件函数,从而在一个挂载点上创建一个子中间件栈。

app.use(url, (req, res, next)=>{
//中间件要执行的代码
//调用下一个中间件或路由
next( );
})

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()  //  是否继续往下执行
})

为什么说这一种是全局的 ,因为所有的接口都走这里 接下来看局部中间件
局部中间件
第一个参数还是路径 第二个参数是一个function 第三个参数还是function

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端口');
})

现在请求/demo接口 浏览器中没有响应 因为第一个回调函数里没有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()就可以一个接一个的往下执行,一般情况下使用局部中间件最多使用一两个就够了 使用多个局部中间件 代码结构如下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值