Express.JS Обработка ошибок на стороне сервера - PullRequest
1 голос
/ 29 марта 2011

Я использую Express.JS на Node.JS для создаваемого приложения.Я настраиваю маршруты и делаю все возможное, чтобы поддерживать архитектуру RESTful.

Каков процесс приема ввода формы, возникновения какой-либо ошибки (не обязательно ошибки проверки) и последующего показа пользователю того жеформа, но включая данные, которые они отправили на сервер в первую очередь?

Сначала я сохранял данные POST в сеансе, но никогда не казалось, что это было хорошее решение, больше похоже на взлом.

Затем я скорректировал свои маршруты и вместо этого использовал app.post|put|del() для обработки отправки формы, затем использовал маршрут с app.all(), который будет использоваться в качестве "универсального".По сути, если бы я столкнулся с ошибкой, я бы позвонил next(), чтобы обработать управление обратно на мой «универсальный» маршрут.Это привело к тому, что я отклонился от своего первоначального подхода RESTful.

Теперь я настроил свои маршруты для более точного отражения подхода RESTful.Однако, если я использую app.redirect(), данные будут потеряны при перенаправлении.Я закончил тем, что использовал что-то вроде другого хака: controller.new_form.apply(this, arguments); (это называется в controller.create())

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

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

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Не могли бы вы просто позвонить res.render с другим шаблоном в зависимости от успеха или неудачи? Итак, если все данные формы POST проверяются, перейдите к res.render 'thankyou.jade', в противном случае повторите res.render 'form.jade'? Это похоже на то, что предлагает kcbanner, только без определения отдельных методов для каждого, хотя это хорошо, если у вас есть особая логика.

0 голосов
/ 17 апреля 2011

Вы можете вызывать представления из других представлений, просто введите req и res.

Пример:

exports.index = function(req, res) {
  res.render('index');
};

exports.verify = function(req, res) {
  res.local('flash', 'Set a template local variable');
  exports.index(req, res);
};

Здесь я устанавливаю шаблон local в одном представлении, а затем вызываю другое представление, чтобы фактически обработать ответ. Вы можете вызвать ваш обработчик get в вашем почтовом обработчике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...