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.