Зачем использовать multer вместо ручной загрузки файлов из контроллера - PullRequest
1 голос
/ 30 апреля 2020

Так что я новичок в использовании expressjs, обычно я выбираю Laravel в качестве моего бэкэнда. но, учитывая некоторые соображения, я выбираю expressjs.

На Laravel, когда мы обрабатываем загрузку файлов, мы можем писать логи загрузки c везде, это ваша свобода делать это. Вы можете инкапсулировать его внутри функции модели, или включить в службу, или где угодно.

Но когда я использую expressjs, на inte rnet так много статей, которые рекомендуют нам использовать multer для загрузки вашего файла. Поскольку мой фон ранее использовал Laravel, я нашел странным использовать multer. Это потому, что multer - это промежуточное ПО. С какой стати мы используем промежуточное ПО для загрузки наших изображений / файлов.

С этим я не могу инкапсулировать мои бизнес-логи c в один сервис и разделить код, а это означает, что мне нужно поддерживать один бизнес-логи c из нескольких мест. Не могли бы вы объяснить, почему все выбирают multer?

Почему бы просто не загрузить его в наше локальное хранилище вручную? (На самом деле, пока я не знаю, как это сделать). Что такое плюсы за минуты от использования этой библиотеки?

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

multer - это связующее ПО для анализа тела , которое обрабатывает тип контента multipart/form-data

Это означает, что оно анализирует необработанные данные http-запроса, которые в основном используются для загрузки файла, и делает их более доступным (хранение на диске / в памяти / ...) для дальнейшей обработки.

Без мультитера вам придется самостоятельно анализировать необработанные данные, если вы хотите получить доступ к файлу.

С этим я не могу инкапсулировать свои бизнес-логи c в одну службу, и это делает код разделенным, и это означает, что мне нужно поддерживать один бизнес-логи c из нескольких мест. Не могли бы вы объяснить, почему все выбирают multer?

multer, так же как и другие промежуточные программы, можно использовать на root для всех маршрутов, но также можно указывать только на указанных c маршруты тоже.

Подробнее о express middleware

1 голос
/ 30 апреля 2020

Прежде всего, Express / body-parser не обрабатывает загрузку файлов изначально, поэтому вы видите, что другие библиотеки загружаются для их обработки. Все они будут загружены как промежуточное ПО, чтобы их можно было вставить в запрос и обработать, что файл действительно был загружен.

Исходя из Symfony фона, я понимаю, откуда вы пришли с желанием обрабатывать вещи более вручную, как я делаю то же самое. Есть и другие альтернативы мультеру; Например, я использую 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, а также параметры, которые можно передать самому промежуточному программному обеспечению.

...