Nodejs connect.multipart() will be removed in connect 3.0
Nodejs connect.multipart() will be removed in connect 3.0
express3.0 如果写上 app.use(express.bodyParser());会提示 connect.multipart() will be removed in connect 3.0 visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives connect.limit() will be removed in connect 3.0 如果不写 post表单提交时req.body为空
Node.js connect.multipart() 将在 Connect 3.0 中被移除
背景信息
在 Express 3.x 版本中,如果你使用 app.use(express.bodyParser()) 进行表单数据解析,你可能会遇到警告信息:
connect.multipart() will be removed in connect 3.0
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives
connect.limit() will be removed in connect 3.0
如果不使用 express.bodyParser(),POST 表单提交时 req.body 会为空。
解决方案
为了适应 Connect 3.0 的变化,你需要使用新的中间件来处理表单数据。这里推荐使用 multer 或者 busboy 来替代 connect.multipart()。
示例代码
1. 使用 Multer
Multer 是一个专门用于处理 multipart/form-data 的中间件,适用于文件上传。
首先,安装 Multer:
npm install multer --save
然后,在你的 Express 应用中配置 Multer:
const express = require('express');
const multer = require('multer');
const app = express();
// 配置 Multer 存储策略
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({ storage: storage });
// 使用 Multer 处理 POST 请求中的表单数据
app.post('/upload', upload.single('avatar'), function (req, res, next) {
// req.file 是上传的文件信息
// req.body 将包含文本字段
res.send(req.file);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
2. 使用 Busboy
Busboy 是另一个轻量级的中间件,可以用来解析 multipart/form-data 和 application/x-www-form-urlencoded 类型的数据。
首先,安装 Busboy:
npm install busboy --save
然后,在你的 Express 应用中配置 Busboy:
const express = require('express');
const busboy = require('connect-busboy');
const app = express();
app.use(busboy());
app.post('/upload', function (req, res, next) {
let result = '';
req.on('data', chunk => {
result += chunk;
});
req.on('end', () => {
// 在这里处理解析后的数据
res.send(result);
});
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
通过上述示例代码,你可以看到如何使用 multer 或 busboy 替代 connect.multipart() 来处理表单数据。这将确保你的应用在升级到 Connect 3.0 后仍然能够正常工作。
visit https://github.com/senchalabs/connect/wiki/Connect-3.0 for alternatives


