Допустим, у меня есть запрос POST в моем API POST /api/comments
, где я создаю комментарий. Комментарии принимаются в виде массива дерева (у каждого комментария есть свойство children, которое может иметь подкомментарии). У меня есть несколько «событий», которые происходят перед отправкой ответа.
Я могу поместить весь необходимый код в одну функцию промежуточного программного обеспечения следующим образом.
function postComments(req, res, next) {
// handle general authentication
if (!isAuthenticated()) {
next("not authenticated ...");
}
// handle more specific authentication (ex. admin)
if (!isAdmin()) {
next("not admin ...")
}
// validate req.body.comments so that each comment has allowed form
if (!areCommentsValid()) {
next("not valid ...");
}
// modify comments for database insertion
const modifiedComments = modifyComments();
// database insertion
db.insert(modifiedComments)
res.sendStatus(201);
}
В приведенном выше примере общая аутентификация и аутентификация администратора могут использоваться на нескольких маршрутах, и следующие промежуточные программы не полагаются на них, код все еще работает. Так что код этих 2 имеет смысл.
В этом примере мое промежуточное программное обеспечение делает несколько вещей.
Я думал, что смогу разбить следующий код на несколько промежуточных программ.
function userAuth(req, res, next) {
// handle user authentication
}
function adminAuth(req, res, next) {
// handle admin auth
}
function validateComments(req, res, next) {
// handle req.body.comments validation
}
function modifyComments(req, res, next) {
// modify comments
// req.commentsForDb = modifiedComments;
}
function postComments(req, res, next) {
// insert req.commentsForDb into database
}
Итак, теперь я разделил свое промежуточное ПО на 4 разных промежуточных ПО, но проблема в том, что промежуточные программы зависят друг от друга.
postComments
требуется modifyComments
для установки req.commentsForDb
, modifyComments
требуется validateComments
и т. Д.
Какой метод предпочтительнее?