myspace
@myspace

Как упростить код?

Довольно длинные методы получаются, хотя логика проста
handlePost(req, res, next) {

        recaptcha(req.body['g-recaptcha-response']).then(

            (result) => {
                return JSON.parse(result).success;
            },

            (error) => {
                return false;
            }

        ).then(
            result => {
                if(result) {
                    userModel.newUser(req.body.email, userHelper.hashPassword(req.body.password))
                        .then(
                        (result) => {
                            return {
                                header: 'Регистрация завершена',
                                text: 'Проверьте Ваш почтовый адрес',
                                status: 'success'
                            };

                        }, (error) => {

                            return {
                                header: 'Ошибка',
                                text: 'Такой email занят',
                                status: 'danger'
                            };
                        }
                    )
                       .then(
                        (result) => {

                            let data = {
                                title: 'Тайтл | Регистрация',
                                message: result ? result : null
                            };

                            res.render('template/registration', data);
                        }
                    );
                } else {
                    let data = {
                        title: 'Тайтл | Регистрация',
                        message: {
                            header: 'Ошибка',
                            text: 'Вы забыли разгадать капчу',
                            status: 'danger'
                        }
                    };

                    res.render('template/registration', data);
                }
            },

            error => {

                let data = {
                    title: 'Тайтл | Регистрация',
                    message: {
                        header: 'Ошибка',
                        text: 'Ошибка',
                        status: 'danger'
                    }
                };
                res.render('template/registration', data);
            }
        );

    }
  • Вопрос задан
  • 362 просмотра
Решения вопроса 3
Negwereth
@Negwereth
lvivcss.com.ua
Вынесите обработчики ошибок в финальный .catch
Ответ написан
Комментировать
Вынесите статические данные типа:
let data = {
                        title: 'Тайтл | Регистрация',
                        message: {
                            header: 'Ошибка',
                            text: 'Вы забыли разгадать капчу',
                            status: 'danger'
                        }
                    };

во внешнюю область видимости. Создайте функцию которая будет формировать эти объекты по входным параметрам и возвращать их. Ну и catch в конце цепочки then-ов вместо второго колбэка. Вы видимо просто не знакомы с основным принципом программирования DRY (Don't repeat yourself).
Ответ написан
Комментировать
@vshvydky
Изначально надо было выбрать не экспресс а коа и писать в генераторах или асинк функциях. Было бы короче, а так промис и есть промис. Вермишель из венов никто не отменял.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы