Не могу получить доступ к данным в почтовом запросе. экспресс - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь получить доступ к данным в запросе POST, однако когда я console.log (req.body), я просто получаю пустой {}.

Я чувствую, что моя ошибка где-то в разметке?

Вот соответствующая разметка на стороне клиента

<div id='create' class="card">
  <form method = 'post' action='/'>
    <textarea placeholder="Enter your name"></textarea><br>
    <button type="submit" class="btn btn-primary">Submit</button>
  </form>
</div>

соответствующий код бэкэнда

app.use(bodyParser.json());

app.post('/',(req, res)=>{
    console.log(req.body);

});

Если пользователь вводит «Джон» в текстовой области, я бы хотел, чтобы страница обновилась и имя Джон появилось в терминале.

Я планирую экспортировать эти данные в другой файл, подключенный к моему mongodb

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Эта проблема была решена с помощью комбинации двух вещей.

1.) Мне нужно было добавить app.use (bodyParser.urlencoded ()), потому что он не был отправлен формой, как если бы он былДанные JSON.

2.) Мне нужно было добавить имя к текстовой области.

0 голосов
/ 16 апреля 2019

При просмотре оператора журнала консоли вы выводите ресурс, который был пустым объектом.Учитывая эту информацию, я посмотрел ваш HTML.

При работе с формами в HTML у вас будет тег формы, но для входных данных, текстовой области и т. Д. Внутри формы потребуется имя атрибут для правильного построения полезной нагрузки.

<textarea name="test"></textarea>

просто покажет новое свойство в полезной нагрузке запроса под названием test , которое содержит содержимое того, что находится в текстовой области в то время, когдаФорма была отправлена.

0 голосов
/ 16 апреля 2019

Вы говорите bodyParser для анализа тела, как будто это JSON.Однако стандартный <form> будет отправлять данные не в формате JSON, а в виде application/x-www-form-urlencoded.

. Чтобы прочитать это в своем экспресс-приложении, вам потребуется что-то вроде этого:

app.use(bodyParser.urlencoded({extended: false}));

Разрешение как JSON, так и данных формы

Если вы хотите разрешить как URL-кодирование, так и данные JSON, вы можете комбинировать оба метода:

app.use(bodyParser.urlencoded({extended: false}))
app.use(bodyParser.json())

Полный пример может быть найдено здесь .


Встроенная альтернатива

Полезно отметить: если вы используете последнюю версию Express, вы можететакже замените модуль body-parser на встроенную альтернативу:

app.use(express.urlencoded({extended: false}))
app.use(express.json())

Это все еще использует body-parser снизу (и, следовательно, имеет тот же самый synax), но может выглядеть немного аккуратнее в вашем приложении.

...