原创转载请注明出处:http://agilestyle.iteye.com/blog/2339754
Middleware
Middleware functions are functions that have access to the request object (req), the response object (res), and the next middleware function in the application’s request-response cycle. The next middleware function is commonly denoted by a variable named next.
Middleware functions can perform the following tasks:
- Execute any code.
- Make changes to the request and the response objects.
- End the request-response cycle.
- Call the next middleware in the stack.
If the current middleware function does not end the request-response cycle, it must call next() to pass control to the next middleware function. Otherwise, the request will be left hanging.
The following figure shows the elements of a middleware function call:
The middleware stack
Web Server通常会监听request,解析request,并且发送response。Node运行环境首先会获取这些request并且将它们从原生字节转换为你可以处理的两个JavaScript对象:request(req)和response(res)。当仅仅使用Node.js,流程图如下所示。
这两个对象将会被送到一个你自己定义的JavaScript的Function中。你会自己解析req来确认用户想要什么,并且巧妙的处理res来准备你的响应。
过了一会儿,你将通过调用res.end来完成响应的编写。这个res.end告诉Node响应已经完成,可以准备发送了。Node运行环境首先将查看你对响应对象做了什么,然后将它转换成另外一束字节,最终发送给在网络上请求的用户。
在Node中,这两个对象仅仅是通过一个Function传递的。但是在Express中,这些对象是通过一系列Function传递的,称为middleware stack。Express将从stack中的第一个Function开始并且沿着Stack向下顺序执行,如下图所示。
每一个在Stack中的函数接收3个参数。第一个两个是req和res,它们通过Node提供;每个函数的第三个参数本身就是一个函数,按照惯例称为next。当next被调用,Express将运行Stack中的下一个函数,如下图所示。
最终,在Stack中的一个函数必须调用res.end,表示结束请求(在Express中,也可以调用其他的方法,比如:res.send或者res.sendFile,但是这些方法内部是调用res.end的)。你可以调用在middleware stack中的任意一个函数的res.end,但是只能调用一次,否则将报错。
Reference
http://expressjs.com/en/guide/writing-middleware.html
Manning.Express.in.Action.Node.applications.with.Express.and.its.companion.tools.2016
相关推荐
而`express-domain-middleware`是针对Express设计的一个开源中间件,其核心功能是利用Node.js的`domain`模块来增强错误处理能力,提高应用的健壮性。 **Node.js Domain模块** 在Node.js中,`domain`模块提供了一种...
Configuring Full-Stack with Node.js, Express.js, MongoDB, Mongoose, Falcor, and Redux Full-Stack Login and Registration for Our Publishing App Server-Side Rendering Advanced Redux and Falcor on the ...
This is due to the huge developer community and it being used in every layer of an application technology stack. This book will teach you how to develop JavaScript applications with simple to use, ...
"Middleware-Express"是Node.js开发中的一个核心概念,它主要与JavaScript的Web应用程序框架——Express密切相关。Express是一个轻量级、灵活的框架,用于构建Web应用和服务,而Middleware(中间件)是Express实现其...
中间件(Middleware)是Express的一个重要概念,它是处理HTTP请求和响应的方法。中间件函数可以访问请求对象(req)、响应对象(res)以及应用程序中用于处理请求/响应的下一个中间件函数。通过组合中间件和路由,...
MERN Stack 是一种流行的前后端开发框架,由四个主要技术组件组成:MongoDB、Express.js、React 和 Node.js。这个名为 "MERN-stack-social-network" 的项目是一个使用 MERN Stack 构建的社交网络应用的源码,旨在...
- `middleware`目录(可选):自定义中间件的存放位置。 **Express 示例** 在"express-demo-main"这个压缩包中,很可能是包含了创建一个简单的Express应用的代码示例。这个示例可能包括初始化Express应用、定义...
Mean-stack-Angular-7-crud-app-example的例子循序渐进的MEAN Stack教程,您将学习从零开始使用Bootstrap 4,MongoDB,NodeJS和Express JS构建Angular 7 CRUD应用程序。 该项目是使用Angular CLI版本7.2.3构建的。 ...
5. **中间件链(Middleware Stack)** 中间件可以叠加,形成一个处理链。每个中间件都有机会处理请求,直到请求被完全处理或者中间件链结束。中间件的顺序很重要,因为它们按照注册的顺序依次执行。 6. **路由与...
(Node.js) Connectr是之上的一层,允许在构建堆栈之后插入/删除中间件。 当您无权访问设置Connect堆栈的代码(例如第三方模块)时,此功能...// Label middleware which is at a specific position on the stack//
console.error(err.stack); res.send(500, 'Something broke!'); }); ``` 路由 Express 提供了多种路由方式,以下是一些常用的路由方式: * `app.use('/', middleware);`:对路径 `/` 的处理。 * `app.get("/",...
《使用MEAN Stack构建口袋妖怪应用——从零到一的实战解析》 在现代Web开发领域,MEAN Stack(MongoDB、Express.js、AngularJS和Node.js)因其灵活性和高效性而备受推崇。本篇文章将深入探讨如何利用MEAN Stack构建...
- `middleware` 目录:可能包含自定义的Express中间件,用于处理特定的业务逻辑。 - `public` 目录:存放静态资源,如CSS、JavaScript文件和图片等。 - `.gitignore` 文件:定义了版本控制系统应该忽略的文件和目录...
中间件在软件开发中是一种非常重要的设计模式,尤其在Node.js的世界里,它在Express、Koa以及Redux等框架中的应用极大地提升了应用的可扩展性和灵活性。本文将深入探讨这三种中间件机制的实现原理,并通过核心代码...
- `middleware`: 自定义中间件,实现如验证、授权等功能。 - `public`: 静态资源文件夹,可能包含CSS样式表、图片和其他公共资源。 - `package.json`: 项目依赖和脚本的配置文件。 ### 开发流程 1. **设置环境**:...
根据提供的文件信息,本文档是一本关于Mongoose的电子书《Mastering Mongoose Become a Full-Stack Mongoose Expert》,由Valeri Karpov编写,该书详细介绍了如何精通Mongoose,目标是使读者成为在使用Node.js与...
Mern Stack(MongoDB、Express、React、Node.js)是一个流行的全栈JavaScript开发框架,用于构建动态Web应用。这个框架结合了前端的React库、后端的Node.js平台以及NoSQL数据库MongoDB,形成了一套完整的解决方案,...
React MERN Stack CRUD应用程序教程-使用React,Node,Express,mongoDB创建前端和后端。 并学习使用React Axios使用REST API。 该项目是通过。 分步教程 可用脚本 在项目目录中,可以运行: npm start 在开发模式...