web开发Nodejs框架Express之中间件的用法

前言

最近学习web开发有点乱,也算是web开发的各个部分都有了了解了吧,对web开发有了一定的思路,现在总结总结一下近两天学习Nodejs的Express框架中的中间件的用法吧。
中间件就是一堆方法,可以接受客户端发来的请求,可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理。专门用来接受请求处理请求的。
中间件可以将复杂的请求进行分开处理,也可以对请求做一些验证。
web开发专栏往期回顾:


关于Express框架的下载,直接使用npm即可下载,更多Express框架的资料可以查看 Express官方文档


什么是中间件?

中间件由两部分构成,中间件方法以及请求处理函数。
中间件方法由Express框架提供,负责拦截请求,请求处理函数由开发人员提供,负责处理请求。
如下是示例程序:

app.get('请求路径',处理函数)
app.post('请求路径',‘处理函数’)

Express框架可以针对同一个请求设置中间件,对同一个请求进行多次处理。
默认情况下,请求从上到下匹配中间件,一但匹配成功,终止匹配,这样就造成请求无法匹配下面的中间件。Express框架给出了next方法,调用next方法将请求的控制权交给下一个中间件,一直遇到结束请求的中间件。
如下是示例代码:

const express =require('express');
//创建网站服务器
const app=express();
app.get('/request',(req,res,next)=>{
    
    
    req.name='张三';
    next();
})
app.get('/request',(req,res)=>{
    
    
    res.send(req.name);
})
//监听端口
app.listen(8000);
console.log("网站服务器启动成功!")

app.use中间件用法

1.app.use中间件可以直接匹配所有的请求方法,可以直接传入请求处理函数,代表接受所有的请求。
示例程序

app.use((req,res,next)=>{
    
    
  console.log('请求了app.use中间件')
  next();
});

2.app.use中间件第一个参数也可以传入请求地址,代表不论什么请求方式,只要是这个请求地址就接收这个请求。

app.use('/request',(req,res,next)=>{
    
    
  console.log('请求了app.use中间件/request')
   next();
 });

中间件应用

1.路由保护
客户端在访问需要登陆的页面时,可以先使用中间件判断用户登陆状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登陆的页面。

const express =require('express');
//创建网站服务器
const app=express();
app.use('/admin',(req,res,next)=>{
    
    
  let isLogin=false;
  if(isLogin){
    
    
    next();
  }else{
    
    
   res.send('您还没有登陆,请先登陆!');
  }
});

app.get('/admin',(req,res)=>{
    
    

  res.send('您已经登陆,可以访问当前页面!')
});
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")

2.网站维护公告
在所有的路由的最上面定义接收所有请求的中间件,直接为客户端做出响应。

const express =require('express');
//创建网站服务器
const app=express();
app.use((req,res,next)=>{
    
    
    res.send('当前网络正在维护.....')
});
app.use('/admin',(req,res,next)=>{
    
    
    let isLogin=false;
    if(isLogin){
    
    
        next();
    }else{
    
    
        res.send('您还没有登陆,请先登陆!');
    }
});
app.get('/admin',(req,res)=>{
    
    
    res.send('您已经登陆,可以访问当前页面!')
});
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")

3.自定义404页面
当用户访问的页面不存在,出现的404页面。

注:页面u不存在的状态码是404,express框架给的状态码是200,如需更改可以使用res.status(404)修改状态码。

const express =require('express');
//创建网站服务器
const app=express();
//创建错误
app.get('/index',(req,res)=>{
    
    
   throw new Error('程序发生了未知错误!')
})
//错误处理中间件
app.use((err,req,res,next)=>{
    
    
 res.status(500).send(err.message);
})
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")

捕获错误

在nodejs中,异步API的错误信息都是通过回调函数获取的,支持用Promise对象的异步API发生错误可以通过catch方法捕获。异步函数执行如果发生错误要如何捕获错误呢?

try catch可以捕获异步函数以及其他同步代码在执行过程中发生的错误,但是不能捕获其他类型的API发生的错误.。
示例代码如下:

const express =require('express');
const fs=require('fs');
//默认情况下fs是不支持异步的,需要对读取文件进行改造
const  promisify=require('util').promisify;
const readFile=promisify(fs.readFile);
//创建网站服务器
const app=express();
app.get('/index',async (req,res,next)=>{
    
    
    try{
    
    
        await readFile('./aaa.js')
    }catch(ex){
    
    
   next(ex);//触发错误处理中间件
    }
})
//错误处理中间件
app.use((err,req,res,next)=>{
    
    
 res.status(500).send(err.message);
})
//监听端口
app.listen(800);
console.log("网站服务器启动成功!")

注:try-catch方法中,try方法中如果出现了错误,就执行catch语句,使用next(ex)触发错误处理中间件,将请求交给下一个中间件(错误处理中间件),响应错误信息。

猜你喜欢

转载自blog.csdn.net/JIANGYINGH/article/details/107005886