как получить данные, переданные из формы в Express (Node.js) - PullRequest
45 голосов
/ 16 февраля 2012

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

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

    <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'); 
});

plss help.

Ответы [ 3 ]

46 голосов
/ 04 августа 2016

Использовать bodyParser.urlencoded() middleware:

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() - для типа содержимого application / json

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

33 голосов
/ 16 февраля 2012

Чтобы 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 ), если вы собираетесь выводить данные формы в ответе.

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

1 голос
/ 16 февраля 2012

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

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

, а затем в jade do

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