为什么使用 multer 而不是手动从控制器上传文件

Why use multer rather than manually upload your files from controller

所以我是使用 expressjs 的新手,通常我选择 Laravel 作为我的后端。但出于某些考虑,我选择了expressjs。

在Laravel,当我们处理文件上传时,我们可以到处写上传逻辑,这是你的自由。您可以将它封装在您的模型函数中,或将其放在服务中,或任何您想要的地方。

但是当我使用 expressjs 时,网上有很多文章建议我们使用 multer 来上传您的文件。由于我的背景以前使用 Laravel,所以我发现使用 multer 很奇怪。因为multer是一个中间件。为什么我们使用中间件来上传我们的 images/files。

有了这个,我无法将我的业务逻辑封装到一个服务中,它使代码分离,这意味着我需要从多个地方维护一个业务逻辑。 你能解释一下为什么每个人都选择 multer 吗?

为什么不手动将其上传到我们的本地存储?(实际上我现在不知道该怎么做)。 使用此库的优点是什么?

首先,Express/body-parser 本身不处理文件上传,所以这就是为什么您看到加载其他库来处理它们的原因。它们都将作为中间件加载,因此可以将它们注入请求并处理实际上传的文件。

来自 Symfony 的背景,我理解你想要更手动地处理事情的原因,就像我一样。 multer 还有其他选择;例如,我使用 express-fileupload 允许您为整个应用程序加载上传中间件,然后您可以使用 req.files 来处理您的上传。例如:

// load the file upload library as app middleware
const fileUpload = require('express-fileupload');

app.use(fileUpload({
  limits: { fileSize: 50 * 1024 * 1024 },
}));

然后假设您有一个名为 'foo':

的文件输入
<input name="foo" type="file" />

在你的路线中你会这样处理:

// now handle a file upload
app.post('/upload', function(req, res) {
  console.log(req.files.foo); // the uploaded file object
});

文件上传文档包含 req.files 对象的示例以及您可以传递给中间件本身的选项。

multer 是一个 正文解析中间件 处理内容类型 multipart/form-data

这意味着它解析主要用于文件上传的原始 http 请求数据,并使其更易于访问(存储在磁盘/内存中/...)以进行进一步处理。

如果没有 multer,如果要访问文件,您将不得不自己解析原始数据。

With this i cant encapsulate my business logic into one service and its make the code separated and with this thats mean i need to maintain one business logic from multiple place. Could you explain me why everyone choose multer ?

multer,就像其他中间件一样,可以在所有路由的根上使用,但也可以只放在特定的路由上。

关于快递的更多信息middleware