⚡ 30 秒速记
- 中间件按注册与匹配顺序处理请求
- 响应结束或
next()继续,路径要明确 - 路由按方法和路径匹配
- 错误处理接收四个参数,放在适当末尾
- 异步错误行为区分
Express 4与Express 5
Express 把一次请求交给按顺序注册的处理函数,每层可以补充信息、结束响应或继续传递。 通用逻辑用中间件,具体资源再按方法和路径匹配路由,未命中时统一返回找不到。错误通过错误处理链整理成合适响应,不能在已经发出响应后再次发送。异步函数的拒绝是否自动转交错误处理要按主版本确认,避免异常让请求一直悬着。
版本校准: Node.js 的事件循环阶段名称相对稳定,但定时器、微任务和底层 libuv 行为会随主版本变化。回答时必须先报运行版本,再用最小脚本验证顺序;不要把浏览器事件循环或某个旧版本输出当作所有 Node.js 版本的固定结论。
Express是目前最流行的基于Node.js的Web开发框架,可以快速地搭建一个完整功能的网站
# 运行原理
# 底层:http模块
Express框架建立在node.js内置的http模块上。http模块生成服务器的原始代码如下
var http = require("http");
var app = http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello world!");
});
app.listen(3000, "localhost");
Express框架的核心是对http模块的再包装。上面的代码用Express改写如下
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello world!');
});
app.listen(3000);
Express框架等于在http模块之上,加了一个中间层
# 什么是中间件
- 简单说,中间件(middleware)就是处理HTTP请求的函数。它最大的特点就是,一个中间件处理完,再传递给下一个中间件。App实例在运行过程中,会调用一系列的中间件
- 每个中间件可以从App实例,接收三个参数,依次为request对象(代表HTTP请求)、response对象(代表HTTP回应),next回调函数(代表下一个中间件)。每个中间件都可以对HTTP请求(request对象)进行加工,并且决定是否调用next方法,将request对象再传给下一个中间件。
- 一个不进行任何操作、只传递
request对象的中间件,就是下面这样
function uselessMiddleware(req, res, next) {
next();
}