node.js学习笔记(20) express中间件

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
性能测试 PTS,5000VUM额度
简介: 开发过javaEE的童鞋一定知道filter,它是一个过滤器,可以拦截任何请求,可以对请求的request和response做相关处理。

开发过javaEE的童鞋一定知道filter,它是一个过滤器,可以拦截任何请求,可以对请求的request和response做相关处理。filter的一般形式是这样的:

public class MyFilter implements Filter {
	
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException {
		//do somthing here
		filterChain.doFilter(request, response);
	}

	public void destroy() {
	
	}
	
	public void init(FilterConfig filterConfig) throws ServletException {

	}
}


web.xml:

...

<filter>
	<filter-name>myFilter</filter-name>
	<filter-class>com.test.MyFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>myFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

...


Express中也有这种过滤器,但它叫中间件。跟filter不同的是,它是一个函数。它也可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next 的变量。


Express中间件可分为五种:

  • 应用级中间件
  • 路由级中间件
  • 错误处理中间件
  • 内置中间件
  • 第三方中间件

应用级中间件


即application级中间件,作用域贯穿整个application,application也就是Express的实例。

使用express-generator创建一个项目middleware:

express middleware

打开app.js,我们可以看到其中一段404的应用级中间件:

...
// 这个中间件没有指定uri,所以它可以拦截所有请求
// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

...


应用级中间也可以指定范围,比如这样:

app.use(‘/users’, function(req, res, next) {
  var err = new Error('User Not Found');
  err.status = 404;
  next(err);
});

app.use(‘/roles’, function(req, res, next) {
  var err = new Error('Role Not Found');
  err.status = 404;
  next(err);
});

路由级中间件


路由级中间件与应用级相差无几,只是绑定的对象变成了express.Router的实例。

举个栗子, routes/index.js:

var express = require('express');
var router = express.Router();

router.use('/', function(req, res, next){
  console.log('somebody visit the homepage');
});

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});

module.exports = router;

错误处理中间件


普通中间件有三个参数,req、res和next,而错误处理中间件有4个参数,分别是err、req、res和next。

app.js有一段错误处理中间件的代码:


// error handlers

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
      message: err.message,
      error: err
    });
  });
}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
  res.status(err.status || 500);
  res.render('error', {
    message: err.message,
    error: {}
  });
});


内置中间件


express.static 是 Express 唯一内置的中间件。

app.js中是这样使用的:

...
//设置express项目的静态目录是"/public"
app.use(express.static(path.join(__dirname, 'public')));
...




第三方中间件


顾名思义,这是第三方提供的中间件,为express的功能提供补充。

第三方中间件可以注册为应用级中间件,也可以注册为路由级中间件。

仍然可以看app.js的代码片段:

...
//cookieParser是一个第三方中间件
var cookieParser = require('cookie-parser');
...
//将cookieParser注册为应用级中间件
app.use(cookieParser());
...




目录
相关文章
|
1月前
|
缓存 负载均衡 JavaScript
构建高效后端服务:Node.js与Express框架实践
在数字化时代的浪潮中,后端服务的重要性不言而喻。本文将通过深入浅出的方式介绍如何利用Node.js及其强大的Express框架来搭建一个高效的后端服务。我们将从零开始,逐步深入,不仅涉及基础的代码编写,更会探讨如何优化性能和处理高并发场景。无论你是后端新手还是希望提高现有技能的开发者,这篇文章都将为你提供宝贵的知识和启示。
|
1月前
|
JavaScript
使用node.js搭建一个express后端服务器
Express 是 Node.js 的一个库,用于搭建后端服务器。本文将指导你从零开始构建一个简易的 Express 服务器,包括项目初始化、代码编写、服务启动与项目结构优化。通过创建 handler 和 router 文件夹分离路由和处理逻辑,使项目更清晰易维护。最后,通过 Postman 测试确保服务正常运行。
52 1
|
1月前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第36天】在探索Node.js的奥秘之旅中,中间件的概念如同魔法一般,它让复杂的请求处理变得优雅而高效。本文将带你领略这一机制的魅力,从概念到实践,一步步揭示如何利用中间件简化和增强你的应用。
|
1月前
|
Web App开发 JSON JavaScript
Node.js 中的中间件机制与 Express 应用
Node.js 中的中间件机制与 Express 应用
|
1月前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
47 0
|
1月前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
7月前
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
120 0
|
6月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
1723 0
|
5月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
285 3
|
2月前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
126 1
【Docker项目实战】Docker部署RabbitMQ消息中间件