# Разделяем получение и отправку формы в Express

Пусть у нас есть форма, отправляющаяся на текущую страницу:

`<form method="GET"> <input name="test1"> <input name="test2"> <input type="submit"> </form>`

Напишем обработчик этой формы:

`app.get('/', function(req, res) { res.render('result'); });`

Как вы уже знаете, в нашем случае обработчик выполнится два раза: при первом заходе на страницу и при отправке формы. Давайте напишем условие, разделяющее эти две ситуации внутри нашего обработчика.

Очевидно, что для проверки нам нужно использовать `req.query`:

`app.get('/', function(req, res) { console.log(req.query); // выведет {} или объект с данными res.render('result'); });`

Есть, однако, проблема. В `req.query` всегда находится объект - или пустой, или заполненный. А объекты всегда равны `true`. Поэтому следующая проверка не будет работать:

`app.get('/', function(req, res) { if (req.query) { res.render('form'); } else { res.render('result'); } });`

Давайте сделаем работающую проверку.

## Первый вариант

Можно проверять наличие каждого поля в объекте с результатом:

`app.get('/', function(req, res) { if (req.query.test1 && req.query.test2) { res.render('form'); } else { res.render('result'); } });`

Этот вариант, однако, имеет недостатки. Написанная нами проверка не пропустит пустое значение инпута, так как оно приводится к `false`. Исправим проблему:

`app.get('/', function(req, res) { if (req.query.test1 !== undefined && req.query.test2 !== undefined) { res.render('form'); } else { res.render('result'); } });`

Однако, способ все равно остается неудобным, так как в проверке нужно перечислить все инпуты формы. Получится, что если у нас пять инпутов - то в условие нужно будет проверять все эти пять инпутов. Неудобно.

## Второй вариант

Описанное неудобство имеет классическое решение - нужно дать кнопке отправке имя:

`<form action="" method="GET"> <input name="test1"> <input name="test2"> <input type="submit" name="submit"> </form>`

В этом случае нам нет нужды проверять каждое поле, чтобы узнать, была ли форма отправлена. Просто проверим наличие нашей кнопки:

`app.get('/', function(req, res) { if (req.query.submit) { res.render('result'); } else { res.render('form'); } });`

## Практические задачи

С помощью формы спросите у пользователя пять чисел. После отправки формы выведите на экран сумму этих чисел.

← →
↑