2016-05-21 2 views
0

У меня есть форма на стороне клиента, которая отправляет данные на сервер через AJAX в моем приложении Express. Я хочу показать некоторые ответы пользователю, когда есть ошибки или сообщение отправлено успешно.Экспресс: общая логика между router.post и router.get

Этот код представляет собой сообщение об ошибке, когда сообщение не может быть отправлено. Конкретная ДИВ в моем шаблоне руля выглядит следующим образом:

<div class="form-validation-error" style="{{formValidationError}}">ERROR: Message cannot be sent!</div> 

Что отключено по CSS по умолчанию:

.form-validation-error { 
    display: none; 
} 

В моих routes/contact.js У меня есть router.post блока, обрабатывающее сообщение отправки:

router.post('/', (req, res, next) => { 
    if(req.body.firstname.length === 0 || !req.body.firstname.match(/\D+/igm)) { 
    var validateFirstname = false; 
    } else { 
    var validateFirstname = true; 
    }; 

    if(req.body.captcha.length === 0 || !req.body.captcha.match(/^kettő|ketto|two$/igm)) { 
    var validateCaptcha = false; 
    } else { 
    var validateCaptcha = true; 
    }; 

    if(validateFirstname === true && validateCaptcha === true) { 
    console.log('SUCCESS: Form validated! The Nodemailer script will be here!'); 
    } else { 
    console.log('ERROR: Form not validated!'); 
    const formValidationErrorTrue = 'display: block;'; // -> How can I achieve this!?? 
    res.send({formValidationError: 'display: block;'}); // -> Or this!?? 
    }; 
}); 

После этого блока у меня есть часть обработки изображения router.get:

router.get('/', (req, res, next) => { 
    fsAsync((err, data) => { 
    if(err) { 
     res.render('404', { 
     title: 'Error 404' 
     }); 
    } 

    const contact = data[2].contact; 

    res.render('contact', { 
     title: 'Contact', 
     data: contact, 
     formValidationError: formValidationErrorTrue // -> How can I achieve this!?? 
    }); 
    }); 
}); 

Мой вопрос в том, как я могу делиться переменными между router.post и router.get?

ответ

1

Вы можете создать метод и вызвать его как для маршрутов получения, так и для отправки. Я бы инкапсулировал всю логику в контроллер, а не прямо в ваш маршрут. Возможно, вы также можете решить эту проблему с помощью промежуточного программного обеспечения (промежуточное ПО Google Express), но я обычно вижу, что он используется для аутентификации или регистрации ошибок.

(Извините за короткий ответ. Я набираю текст на своем телефоне)

+0

Благодарим вас за идею. Я думаю, что я напишу функцию Middleware в 'router.use'. – Lanti

Смежные вопросы