const express = require('express');
const app = express();
// 获取产品数据的函数(假设已存在)
function getProductData(productId, sort) {
// 这里实际实现获取数据并根据sort排序
return [];
}
// 中间件
const productMiddleware = (req, res, next) => {
const productId = parseInt(req.params.productId);
if (isNaN(productId)) {
return res.status(400).send('productId必须是数字');
}
const sort = req.query.sort === 'asc' ? 'asc' : req.query.sort === 'desc' ? 'desc' : 'asc';
const data = getProductData(productId, sort);
// 将数据挂载到req上,方便后续路由处理
req.productData = data;
next();
};
app.get('/product/:productId', productMiddleware, (req, res) => {
res.send(req.productData);
});
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});
好处
- 数据合法性验证:确保
productId
是数字,防止非法输入导致程序出错或安全漏洞,增强了应用的健壮性。
- 数据预处理:在进入具体的路由处理逻辑前,提前获取并排序好数据,使得路由处理函数更加简洁,专注于返回响应,提高了代码的可读性和维护性。