一、express模块分类
- 核心模块
- 核心中间件
- 路由和控制器模块
- 扩展模块
- 应用和架构模块
1、核心模块(内置)
核心模块分为入口模块、路由模块、请求/响应对象三个部分。
(1)入口模块即创建应用示例express()
核心方法有:
- app.use():挂载中间件和路由。
- app.get/post/put/delete():定义路由处理函数。
- app.listen():启动服务器。
(2)路由模块(express.Router):用于拆分路由逻辑,实现模块化。
const router = express.Router();
router.get('/user',(req,res) =>{
res.send('User');
})
app.use('/api',router);
(3)请求/响应对象
req:请求对象,包含请求参数,req.body,req.params,req.query等参数。
res:响应对象,包含响应方法,res.send(),res.json(),res.status()等方法。
2、核心中间件(内置)
中间件是处理请求的函数,按照顺序执行,可以访问req、res和next(),express内置一下核心中间件:
(1)express.json():解析JSON格式请求体(content-type:application/json)。
(2)express.urlencoded():解析URL编码格式请求体(content-type:application/x-www-form-urlencoded)。
(3)express.static():托管静态资源文件(html,css,图片等等)
(4)express.raw():解析原始二进制数据(如文件上传)
(5)express.text():解析纯文本请求体。
3、路由和控制器模块
(1)路由模块按照功能拆分路由文件(userRoute.js,postRoute.js),通过app.use()挂载。
(2)控制器模块:分离路由和处理逻辑,路由金负责分发请求,控制器函数负责具体业务逻辑。
// 路由
router.get('/user/:id', userController.getUser);
// 控制器
const userController = {
getUser(req,res){
// 处理逻辑,根据req.params.id去数据库获取当前id的用户数据
}
}
4、扩展模块
通过npm下载使用第三方中间件即扩展模块,一下介绍几个扩展模块。
(1)路由增强
- express-async-handler:简化异步路由的错误处理。
- express-rate-limit:请求频率限制。
(2)安全防护
- helmet:设置http安全头(如content-security-Policy)。
- cors:处理跨域资源共享。
(3)模板引擎:ejs,pug,hbs,渲染服务器端模板。
(4)数据库集成
- mongoose:用于MongoDB数据库
- sequelize:用于sql数据库
(5)日志记录:morgan:记录请求日志(如dev,combined格式)
const morgan = require('morgan');
app.use(morgan('dev')); // 开发环境日志
(6)错误处理中间件:自定义错误处理函数,需包含四个参数,err,req,res,next
app.use((err, req, res, next)=>{
if(err) throw err;
console.log(req);
res.status(500).json({ error: "服务器错误,请联系管理员" });
})
5、应用架构模块
1、项目结构
project/
├─ app.js # 入口文件
├─ package.json # 依赖配置
├─ routes/ # 路由模块
│ ├─ userRoutes.js
│ └─ index.js # 路由汇总
├─ controllers/ # 控制器模块
├─ middleware/ # 自定义中间件
└─ config/ # 配置文件(如数据库、环境变量)
2、环境配置
- 使用dotenv管理环境变量(.env文件)。
- 通过app.get('env')判断环境。