Node.js выражают правильное использование промежуточного программного обеспечения bodyParser

Я новичок в node.js и выражаю и экспериментирую с ними некоторое время. Теперь я путаюсь с дизайном экспресс-структуры, связанной с разбором тела запроса. Из официального руководства экспресс:

app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);

После настройки всего промежуточного программного обеспечения мы добавим маршрут, который мы хотим обработать:

app.post('/test', function(req, res){ 
  //do something with req.body      
});

Проблема с этим подходом заключается в том, что все тела запроса будут проанализированы до проверки проверки маршрута. Кажется, очень неэффективно разбирать тело недействительных запросов. И даже более того, если мы включим обработку загрузки:

app.use(express.bodyParser({uploadDir: '/temp_dir'}));

Любой клиент может бомбардировать сервер, загружая любые файлы (отправив запрос ЛЮБОЙ маршрут/путь!), все, что будет обрабатываться и храниться в '/temp_dir'. Я не могу поверить, что этот метод по умолчанию широко пропагандируется!

Мы можем, конечно, использовать функцию bodyParser при определении маршрута:

app.post('/test1', bodyParser, routeHandler1);
app.post('/test2', bodyParser, routeHandler2);

или даже, возможно, проанализировать тело в каждой функции, которая обрабатывает маршрут. Однако это утомительно.

Есть ли лучший способ использовать express.bodyParser для всех допустимых (определенных) маршрутов и использовать возможность загрузки файлов только на выбранных маршрутах, не имея много повторений кода?

Ответ 1

Ваш второй метод в порядке. Помните, что вы также можете передавать массивы промежуточных функций app.post, app.get и друзей. Таким образом, вы можете определить массив с именем uploadMiddleware с вашими вещами, которые обрабатывают тела POST, загружают и т.д. И используют это.

app.post('/test1', uploadMiddleware, routeHandler1);

Примеры для новичков. Начальный код, который поможет вам получить чертову работу в первый день, а производственный код, который эффективен и безопасен, часто очень отличается. Вы делаете, конечно, достоверную мысль о том, чтобы не принимать закачки на произвольные пути. Что касается синтаксического анализа всех запросов, которые являются "очень неэффективными", это зависит от отношения недействительных/атак POST-запросов к законным запросам, которые отправляются в ваше приложение. Среднее фоновое излучение запросов зонда атаки, вероятно, недостаточно, чтобы беспокоиться, пока ваш сайт не станет популярным.

Также здесь сообщение в блоге с подробной информацией о соображениях безопасности bodyParser.