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为空


3 回复

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-dataapplication/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');
});

通过上述示例代码,你可以看到如何使用 multerbusboy 替代 connect.multipart() 来处理表单数据。这将确保你的应用在升级到 Connect 3.0 后仍然能够正常工作。


在 Connect 3.0 版本中,connect.multipart()connect.limit() 将被移除。这会导致使用 express.bodyParser() 时出现警告,并且可能导致 POST 请求中的 req.body 为空。

为了解决这个问题,可以使用 multer 这个中间件来处理文件上传,同时使用 body-parser 来解析普通表单数据。以下是如何配置这两个中间件的示例:

示例代码

首先,安装所需的依赖包:

npm install express multer body-parser

然后,在你的应用中使用这些中间件:

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');

const app = express();

// 设置 Multer 以处理文件上传
const upload = multer({ dest: 'uploads/' });

// 使用 body-parser 解析普通表单数据
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// 示例路由,处理带有文件的 POST 请求
app.post('/upload', upload.single('file'), (req, res) => {
    // req.file 是已上传的文件信息
    // req.body 包含其他表单字段
    res.send(`File uploaded successfully! Name: ${req.file.originalname}`);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. Multer 用于处理文件上传。在这个例子中,upload.single('file') 用于处理单个文件的上传。
  2. body-parser 用于解析 JSON 和 URL 编码的表单数据。这对于处理普通表单数据非常有用。

通过这种方式,你可以确保在 Connect 3.0 中正确地处理文件上传和普通表单数据,避免了 connect.multipart() 被移除所带来的问题。

回到顶部