中间件

Express框架中,中间件用于拦截所有或部分请求,并对这部分请求和响应上下文进行统一处理。实际上中间件这个名字起的不是很好,它的概念类似Java中的拦截器或是过滤器。

使用中间件

前面我们已经使用过很多中间件了,比如Cookie、Session的支持都是通过中间件实现的,下面例子演示如何注册中间件。

下面例子中,我们注册了一个全局中间件。

app.use(myMiddleware);

下面例子中,我们全局注册中间件到指定路径,它会匹配/api开头的所有请求。

app.use('/api', myMiddleware);

注意:使用app.use()注册中间件时,指定的路径是前缀匹配的。

自定义中间件

实际上,中间件和路由的处理函数一样,都是一个接收reqresnext这3个参数的函数。下面例子代码我们自定义了一个中间件myMiddleware

const myMiddleware = (req, res, next) => {
  console.log('middleware handled');
  next();
};

注意中间件中,如果需要将请求继续向下一个处理函数传递,因此需要调用next()方法;如果是实现类似登陆拦截的功能,则直接响应请求即可。

内置中间件

Express框架包含了几个实用的内置中间件,这里我们简单介绍一下。

全局错误处理中间件

Express支持一个特殊的全局错误处理中间件,它需要我们自己定义,下面是一个例子。

const errHandleMiddleware = (err, req, res, next) => {
  console.log(err);
  res.status(500).end();
}

错误处理中间件需要4个参数:errreqresnext,后3个参数我们已经很了解了,第1个参数err表示前面处理函数中抛出的异常。Express框架会自动捕捉HTTP请求处理中的异常,交给错误处理中间件进行处理。例子代码中,我们直接打印了一些日志,并返回了500错误。

最后,我们使用app.use()注册这个错误处理中间件。

app.use(errHandleMiddleware);

注意,错误处理中间件应该在router中间件之后注册。

静态资源中间件

静态资源中间件可以指定一个路径,其中的文件会以静态资源的方式提供。下面是配置静态资源中间件的一个例子。

app.use('/static', express.static(path.join(__dirname, 'static')));

其中/static是路径前缀,比如我们服务器上指定文件夹里有一个1.txt文件,那么它的URL路径就是/static/1.txt

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap