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

本文涉及的产品
服务治理 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());
...




目录
相关文章
|
1月前
|
开发框架 JavaScript 安全
js开发:请解释什么是Express框架,以及它在项目中的作用。
Express是Node.js的Web开发框架,简化路由管理,支持HTTP请求处理。它采用中间件系统增强功能,如日志和错误处理,集成多种模板引擎(EJS、Jade、Pug)用于HTML渲染,并提供安全中间件提升应用安全性。其可扩展性允许选用合适插件扩展功能,加速开发进程。
|
3月前
|
JSON JavaScript 前端开发
超级实用!详解Node.js中的util模块和express模块
超级实用!详解Node.js中的util模块和express模块
|
3月前
|
存储 JavaScript 数据库
nodejs中express框架实现增删改查接口
nodejs中express框架实现增删改查接口
|
16天前
|
开发框架 JavaScript 中间件
node+express搭建服务器环境
node+express搭建服务器环境
node+express搭建服务器环境
|
13天前
|
开发框架 JavaScript 前端开发
【Node系列】Express 框架
Express.js 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,提供一系列强大的特性来帮助你创建各种 web 和移动设备应用。
33 2
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express构建RESTful API
使用Node.js和Express构建RESTful API
19 0
|
2月前
|
开发框架 JavaScript 前端开发
比较两个突出的node.js框架:koa和express
接上文讲述了 koa框架,这边文章比较一下这两个突出的node.js框架:koa和express
|
3月前
|
JavaScript 前端开发
nodejs配置express服务器,运行后自动打开浏览器
作为前端开发的项目,有的时候打包完后就想在本地测试是什么样子的,另外一些如cesium等程序,需要在服务的环境下才能启动三维球等。 这里使用nodejs+express搭建一个普通的服务器。
nodejs配置express服务器,运行后自动打开浏览器
|
4月前
|
开发框架 JSON JavaScript
Node.js教程-express框架
Node.js教程-express框架
39 1
|
7月前
|
JSON JavaScript 中间件
node.js中Express框架路由,中间件
node.js中Express框架路由,中间件