- Node.js Blueprints
- Krasimir Tsonev
- 373字
- 2021-07-16 11:36:13
Exploring middleware architecture
The Node.js framework is based on the middleware architecture. That's because this architecture brings modularity. It's really easy to add or remove functionalities from the system without breaking the application because the different modules do not depend on each other. Imagine that we have several modules that are all stored in an array, and our application starts using them one by one. We are controlling the whole process, that is, the execution continues only if we want it to. The concept is demonstrated in the following diagram:

Connect (https://github.com/senchalabs/connect) is one of the first frameworks that implements this pattern. In the context of Node.js, the middleware is a function that accepts the request, response, and the next callbacks. The first two parameters represent the input and output of the middleware. The last one is a way to pass the flow to the next middleware in the list. The following is a short example of this:
var connect = require('connect'), http = require('http'); var app = connect() .use(function(req, res, next) { console.log("That's my first middleware"); next(); }) .use(function(req, res, next) { console.log("That's my second middleware"); next(); }) .use(function(req, res, next) { console.log("end"); res.end("hello world"); }); http.createServer(app).listen(3000);
The use
method of connect
accepts middleware. In general, the middleware is just a simple JavaScript function. We can write whatever we want in it. What is important to do at the end is to call the next
method. It passes the flow to the next middleware. Often, we will need to transfer data between the middleware. It's a common practice to modify the request or the response objects because they are the input and output of the module. We can attach new properties or functions, and they will be available for the next middleware in the list. As in the following code snippet, we are attaching an object to a data
property.
.use(function(req, res, next) { req.data = { value: "middleware"}; next(); }) .use(function(req, res, next) { console.log(req.data.value); })
The request and response objects are identical in every function. Thus, the middleware share the same scope. At the same time, they are completely independent. This pattern provides a really flexible development environment. We can combine modules that do different tasks written by different developers.
- 演進式架構(原書第2版)
- Spring Cloud Alibaba核心技術與實戰案例
- Spring Boot開發與測試實戰
- 數據庫系統教程(第2版)
- JavaScript+jQuery網頁特效設計任務驅動教程(第2版)
- Visual Basic學習手冊
- The Data Visualization Workshop
- 人人都是網站分析師:從分析師的視角理解網站和解讀數據
- 名師講壇:Java微服務架構實戰(SpringBoot+SpringCloud+Docker+RabbitMQ)
- OpenShift在企業中的實踐:PaaS DevOps微服務(第2版)
- HTML5+CSS3網站設計基礎教程
- Node.js:來一打 C++ 擴展
- Mastering HTML5 Forms
- Go語言從入門到精通
- Web開發新體驗