Express中app.use、express.static、cors中间件作用及中间件概念咨询
1. 中间件定义与 app.use() 运行机制
中间件是 Express 中处理 HTTP 请求的可复用函数,每一个中间件都可以访问请求对象 req、响应对象 res,以及用于触发下一个中间件执行的 next 函数。app.use() 的作用是将传入的中间件注册到全局请求处理链路中,所有进入服务的请求,都会按照你编写 app.use() 的先后顺序,依次执行对应的中间件逻辑:
- 如果某个中间件执行了返回响应的操作(比如调用
res.send()、res.json()),整个请求处理流程就会终止,不会继续执行后续中间件 - 如果没有返回响应,中间件需要调用
next()才会触发下一个中间件的执行
2. express.static() 中间件的作用
这是 Express 内置的专门用于托管静态资源的中间件,不需要额外安装依赖。它的作用是把你指定文件夹内的静态文件(HTML、CSS、JS、图片、字体等)直接对外暴露,用户可以通过 URL 直接访问这些文件,不需要你手动编写对应路由读取文件返回。
你示例代码中的写法存在不规范问题,标准写法是 app.use(express.static(path.join(__dirname, "public"))),作用是指定项目根目录下的 public 文件夹作为静态资源托管目录:比如 public 文件夹内有 logo.png 文件,用户请求 http://localhost:3000/logo.png 时,这个中间件就会直接读取文件返回给客户端,不会走到后续的逻辑中。
3. cors() 中间件的作用
这是第三方的跨域处理中间件,需要额外通过 npm 安装依赖。浏览器的同源策略默认会阻止前端页面从不同域名、端口、协议的服务端请求资源,调用 require("cors")() 会生成一个跨域处理中间件,它会自动给所有响应头添加跨域许可相关的字段,允许任意来源的请求访问你的服务,不需要你手动编写代码设置响应头的跨域参数。
示例代码的完整执行流程
- 服务启动后监听3000端口
- 收到客户端请求后,首先进入
express.static中间件,判断是否是请求public文件夹内的静态资源:如果是直接返回资源,请求结束;如果不是继续走后续逻辑 - 进入
cors中间件,给响应头添加跨域相关参数,之后调用next()进入后续你注册的其他路由/中间件逻辑
内容的提问来源于stack exchange,提问作者Elad87

