Как обрабатывать POST-данные в Node.js? - PullRequest
563 голосов
/ 28 ноября 2010

Как извлечь данные формы (form[method="post"]) и загрузки файлов, отправленные с помощью метода HTTP POST в Node.js ?

Я прочитал документацию, гуглил и ничего не нашел.

function (request, response) {
    //request.post????
}

Есть библиотека или взлом?

Ответы [ 26 ]

0 голосов
/ 04 марта 2019

Вам нужно использовать bodyParser (), если вы хотите, чтобы данные формы были доступны в req.body. body-parser анализирует ваш запрос и преобразует его в формат, из которого вы можете легко извлечь необходимую информацию.

Например, допустим, у вас есть форма регистрации на вашем веб-интерфейсе. Вы заполняете его и запрашиваете у сервера сохранить данные где-нибудь.

Извлечение имени пользователя и пароля из вашего запроса выполняется так же просто, как показано ниже, если вы используете body-parser.

.............................................................

var loginDetails = {

username : request.body.username,

password : request.body.password

};
0 голосов
/ 23 января 2019

Вы можете легко отправить и получить ответ на запрос POST, используя «Запрос - упрощенный HTTP-клиент» и Javascript Promise.

var request = require('request');

function getData() {
    var options = {
        url: 'https://example.com',
        headers: {
            'Content-Type': 'application/json'
        }
    };

    return new Promise(function (resolve, reject) {
        var responseData;
        var req = request.post(options, (err, res, body) => {
            if (err) {
                console.log(err);
                reject(err);
            } else {
                console.log("Responce Data", JSON.parse(body));
                responseData = body;
                resolve(responseData);
            }
        });
    });
}
0 голосов
/ 18 января 2015

Вы можете извлечь параметр сообщения без использования экспресс.

1: nmp install multiparty

2: импорт многопартийности. как var multiparty = require('multiparty');

3: `

if(req.method ==='POST'){
   var form = new multiparty.Form();
   form.parse(req, function(err, fields, files) {
      console.log(fields['userfile1'][0]);
    });
    }

4: и ФОРМА HTML ЕСТЬ.

<form method=POST enctype=multipart/form-data>
<input type=text name=userfile1><br>
<input type=submit>
</form>

Надеюсь, это сработает для вас. Спасибо.

0 голосов
/ 14 июля 2015

Ограничить размер POST, чтобы избежать затопления вашего узла приложения. Существует отличный модуль raw-body , подходящий как для экспресс, так и для соединения, который может помочь вам ограничить запрос по размеру и длине.

0 голосов
/ 13 августа 2015

Если это связано с загрузкой файла, браузер обычно отправляет его как "multipart/form-data" тип контента.Вы можете использовать это в таких случаях

var multipart = require('multipart');
multipart.parse(req)

Ссылка 1

Ссылка 2

0 голосов
/ 11 мая 2016

В полях формы, подобных этим

   <input type="text" name="user[name]" value="MyName">
   <input type="text" name="user[email]" value="myemail@somewherefarfar.com">

, некоторые из приведенных выше ответов не будут выполнены, поскольку они поддерживают только плоские данные.

Пока я использую ответ Кейси Чу, но с "qs" вместо модуля "querystring".Это также модуль "body-parser" .Поэтому, если вы хотите вложенные данные, вы должны установить qs.

npm install qs --save

Затем замените первую строку следующим образом:

//var qs = require('querystring');
var qs = require('qs'); 

function (request, response) {
    if (request.method == 'POST') {
        var body = '';

        request.on('data', function (data) {
            body += data;

            // Too much POST data, kill the connection!
            // 1e6 === 1 * Math.pow(10, 6) === 1 * 1000000 ~~~ 1MB
            if (body.length > 1e6)
                request.connection.destroy();
        });

        request.on('end', function () {
            var post = qs.parse(body);
            console.log(post.user.name); // should work
            // use post['blah'], etc.
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...