Подтвердить что ты не робот

Как получить данные, переданные из формы в Express (Node.js)

Я хотел бы получить данные, которые передаются со страницы с использованием формы и использовать эти данные на перенаправленной странице.

У меня есть эта форма на моей стороне клиента.

    <form action="game" method="get">
                    <input type="text" name="name"/>
                    <input type="submit" />
    </form>

и у меня есть этот script на моем сервере.

app.get('/game',function(req,res){
res.sendfile(__dirname + '/game.html'); 
});

Справка plss.

4b9b3361

Ответ 1

Используйте промежуточное ПО 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() для типа содержимого x-www-form-urlencoded

  • true - для вложенных структур данных
  • false - для пар имя-значение

json() - для типа содержимого приложения /json

Обратите внимание, что для формы /multipart требуется другой анализатор тела (например, multer)

Ответ 2

Чтобы Express мог правильно обрабатывать данные формы, вам необходимо убедиться, что bodyParser включен следующим образом:

var express = require('express'),
    app = express.createServer();

app.use(express.bodyParser());
//the rest of your configuration

Затем в вашем обработчике POST вы можете получить доступ к телу формы через свойство Request.body следующим образом:

app.post('/game', function (req, res) {
    res.render('some-file', { name: req.body.name });
});

Также вам нужно будет использовать шаблонизатор (например, Jade), если вы собираетесь выводить данные формы в ответе.

Устаревший, принятый ответ - правильное решение

Ответ 3

Если вам нужен доступ к именам переменных в ваших представлениях, вы должны использовать функцию res.render и передать переменную, например:

res.render('game', {
    name: req.body.name
}

а потом в нефрите до

div!= name