Express.js 有哪些常用的中间件?

在使用 Express.js 开发应用程序时,中间件(Middleware)是处理请求和响应的关键组件。它们可以执行各种任务,如解析请求体、添加HTTP头部、记录日志等。以下是一些常用的中间件:

  1. body-parser
    • 用于解析传入的请求体。它对JSON、原始文本、URL编码数据和多部分表单数据有效。
    • 注意:自Express 4.16.0起,express.json()express.urlencoded() 已经内置支持解析JSON和URL编码的数据。
  2. cookie-parser
    • 解析Cookie头部并填充req.cookies对象。
    • 结合signed cookies功能,可以通过设置密钥来签名cookies。
  3. cors
    • 提供一个简单的CORS中间件,允许你轻松地配置跨域资源共享策略。
  4. express-session
    • 管理会话信息,通过存储在服务器端的状态为无状态HTTP协议增加记忆能力。
    • 经常与会话存储库一起使用,比如connect-mongoconnect-redis,以持久化会话数据。
  5. morgan
    • HTTP请求日志记录器中间件,支持多种格式的日志输出,包括dev、combined等。
  6. helmet
    • 帮助设置一些安全相关的HTTP头,提供一套简单的防护措施对抗常见的网络攻击。
  7. compression
    • 对所有响应进行Gzip压缩,减小传输大小,提高页面加载速度。
  8. method-override
    • 允许客户端发送PUT、DELETE等HTTP方法,即使是在只支持GET和POST的浏览器上。
  9. multer
    • 处理multipart/form-data类型的文件上传,非常适合处理文件上传需求的应用程序。
  10. errorhandler
    • 在开发环境中友好地显示错误信息,通常不应该在生产环境中启用。
  11. serve-static
    • 用来服务静态文件,例如图片、CSS文件、JavaScript文件等。

使用示例

nodejs 复制代码
const express = require('express');
const bodyParser = require('body-parser');
const cookieParser = require('cookie-parser');
const cors = require('cors');
const session = require('express-session');
const morgan = require('morgan');
const helmet = require('helmet');
const compression = require('compression');
const methodOverride = require('method-override');
const multer = require('multer');

const app = express();

// 中间件应用
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded
app.use(cookieParser());
app.use(cors());
app.use(session({ secret: 'your-secret-key', resave: false, saveUninitialized: true }));
app.use(morgan('dev'));
app.use(helmet());
app.use(compression());
app.use(methodOverride('_method'));
app.use(multer().single('file')); // or any other configuration you need for multer

// ... routes and other middleware ...

app.listen(3000, () => console.log('Server running on port 3000'));
相关推荐
陈皮话梅糖@4 小时前
使用 Provider 和 GetX 实现 Flutter 局部刷新的几个示例
开发语言·javascript·flutter
Yolo@~8 小时前
个人网站:基于html、css、js网页开发界面
javascript·css·html
斯~内克8 小时前
Electron 菜单系统深度解析:从基础到高级实践
前端·javascript·electron
dr李四维8 小时前
vue生命周期、钩子以及跨域问题简介
前端·javascript·vue.js·websocket·跨域问题·vue生命周期·钩子函数
旭久8 小时前
react+antd中做一个外部按钮新增 表格内部本地新增一条数据并且支持编辑删除(无难度上手)
前端·javascript·react.js
朴拙数科10 小时前
技术长期主义:用本分思维重构JavaScript逆向知识体系(一)Babel、AST、ES6+、ES5、浏览器环境、Node.js环境的关系和处理流程
javascript·重构·es6
拉不动的猪10 小时前
vue与react的简单问答
前端·javascript·面试
旭久11 小时前
react+antd封装一个可回车自定义option的select并且与某些内容相互禁用
前端·javascript·react.js
阿丽塔~11 小时前
React 函数组件间怎么进行通信?
前端·javascript·react.js