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

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 开发过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());
...




目录
相关文章
|
17天前
|
JavaScript 中间件 关系型数据库
构建高效的后端服务:Node.js 与 Express 的实践指南
在后端开发领域,Node.js 与 Express 的组合因其轻量级和高效性而广受欢迎。本文将深入探讨如何利用这一组合构建高性能的后端服务。我们将从 Node.js 的事件驱动和非阻塞 I/O 模型出发,解释其如何优化网络请求处理。接着,通过 Express 框架的简洁 API,展示如何快速搭建 RESTful API。文章还将涉及中间件的使用,以及如何结合 MySQL 数据库进行数据操作。最后,我们将讨论性能优化技巧,包括异步编程模式和缓存策略,以确保服务的稳定性和扩展性。
|
9天前
|
JavaScript 安全 中间件
深入浅出Node.js中间件机制
【10月更文挑战第36天】在探索Node.js的奥秘之旅中,中间件的概念如同魔法一般,它让复杂的请求处理变得优雅而高效。本文将带你领略这一机制的魅力,从概念到实践,一步步揭示如何利用中间件简化和增强你的应用。
|
21天前
|
消息中间件 JavaScript 中间件
深入浅出Node.js中间件机制
【10月更文挑战第24天】在Node.js的世界里,中间件如同厨房中的调料,为后端服务增添风味。本文将带你走进Node.js的中间件机制,从基础概念到实际应用,一探究竟。通过生动的比喻和直观的代码示例,我们将一起解锁中间件的奥秘,让你轻松成为后端料理高手。
26 1
|
24天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的完美结合
【10月更文挑战第21天】本文将引导你走进Node.js和Express框架的世界,探索它们如何共同打造一个高效、可扩展的后端服务。通过深入浅出的解释和实际代码示例,我们将一起理解这一组合的魅力所在,并学习如何利用它们来构建现代Web应用。
44 1
|
12天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
29 0
|
12天前
|
Web App开发 JavaScript 前端开发
构建高效后端服务:Node.js与Express框架的实践
【10月更文挑战第33天】在数字化时代的浪潮中,后端服务的效率和可靠性成为企业竞争的关键。本文将深入探讨如何利用Node.js和Express框架构建高效且易于维护的后端服务。通过实践案例和代码示例,我们将揭示这一组合如何简化开发流程、优化性能,并提升用户体验。无论你是初学者还是有经验的开发者,这篇文章都将为你提供宝贵的见解和实用技巧。
|
14天前
|
Web App开发 JavaScript 中间件
构建高效后端服务:Node.js与Express框架的融合之道
【10月更文挑战第31天】在追求快速、灵活和高效的后端开发领域,Node.js与Express框架的结合如同咖啡遇见了奶油——完美融合。本文将带你探索这一组合如何让后端服务搭建变得既轻松又充满乐趣,同时确保你的应用能够以光速运行。
23 0
|
6月前
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
110 0
|
5月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
1397 0
|
4月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
277 3