自定义 Express 中间件以实现 express.urlencoded() 的类似功能
const express = require('express');
const app = express();
// 自定义解析JSON的中间件
app.use(express.json());
// 自定义解析URL编码(通常表单提交)的中间件
app.use(express.urlencoded({ extended: true }));
// 自定义中间件实现express.urlencoded()的功能
app.use((req, res, next) => {
if (!req.body) {
const contentType = req.headers['content-type'] || '';
if (contentType.includes('application/x-www-form-urlencoded')) {
let body = '';
req.on('data', chunk => {
body += chunk.toString();
});
req.on('end', () => {
if (body.length) {
req.body = qs.parse(body);
}
next();
});
} else {
next();
}
} else {
next();
}
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这个示例中,我们首先引入了express
模块并创建了一个Express应用。然后,我们使用express.json()
中间件来处理JSON编码的请求体。接下来,我们定义了一个自定义中间件,它会检查请求是否包含application/x-www-form-urlencoded
内容类型,并且如果请求体尚未解析,则会解析它。这个自定义中间件使用了Node.js的事件循环来处理数据流,并在请求结束时解析数据并将其设置为req.body
属性。最后,我们启动服务器并监听3000端口。
评论已关闭