Как получить данные из формы в Express (node.js)
-
25-10-2019 - |
Вопрос
Я хотел бы получить данные, которые передаются со страницы, используя форму, и использовать эти данные на странице, которая перенаправлена.
У меня есть эта форма в моей клиентской стороне.
<form action="game" method="get">
<input type="text" name="name"/>
<input type="submit" />
</form>
И у меня есть этот скрипт на моем сервере.
app.get('/game',function(req,res){
res.sendfile(__dirname + '/game.html');
});
пожалуйста, помогите.
Решение
Использовать bodyParser.urlencoded(
) промежуточное программное обеспечение:
const bodyParser = require('body-parser');
app.use(bodyParser.urlencoded({ extended: true }));
Тогда значения формы будут на req.body:
app.post('/game', function (req, res) {
res.render('the_template', { name: req.body.name });
});
Параметр { extended: true }
Позволяет BodyParser принимать JSON, такие как данные в данных формы, включая вложенные объекты. например { person: { name: Adam } }
отправлено с помощью JavaScript, а не пары значений имени, которые отправляют традиционная форма HTML. Если вам не нужно, вы можете установить расширенное значение для FALSE. Очевидно, что не определение расширенного варианта (т.е. с использованием настройки по умолчанию), по -видимому, устарело, и они, кажется, хотят, чтобы вы решили, нужны ли вам вложенные параметры или пары простого значения имени.
Если вы хотите иметь возможность проанализировать данные формы для некоторых маршрутов и данных JSON для других на вашем экспресс -сервере, вы можете использовать:
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: <true|false> }))
urlencoded()
для типа контента XWW-FORM-URLENCODE
true
- Для вложенных структур данныхfalse
- Для пары значений имени
json()
- Для приложения/типа контента JSON
Обратите внимание, что форма/Multipart требует другого анализатора тела (например, Multer)
Другие советы
Чтобы Express хорошо обрабатывал данные формы, вам нужно убедиться, что у вас есть bodyParser
Включено как SO:
var express = require('express'),
app = express.createServer();
app.use(express.bodyParser());
//the rest of your configuration
Затем в вашем пост -обработчике вы можете получить доступ к корпусу формы через Request.body
собственность как SO:
app.post('/game', function (req, res) {
res.render('some-file', { name: req.body.name });
});
Также вам нужно использовать шаблон -двигатель (например, Джейд) Если вы намереваетесь вывести данные формы в ответе.
Устарело, принятый ответ правильное решение
Если вам нужно получить доступ к именам переменных в ваших представлениях, вам следует использовать res.render
функционируйте и передайте переменную как:
res.render('game', {
name: req.body.name
}
А потом в Джейд
div!= name