Плагин формы JQuery, отправляющий пустые данные в Node.js?

0

html-форму:

<form id="importForm" enctype="multipart/form-data">

                        <p>
                            <label for="ownerName">Owner Name<pow
                                    class="requiredFormItem">&nbsp;*</pow></label><select id="ownerName"
                                name="ownerName"></select>
                        </p>
                        <p>
                            <label for="policyName">Policy Name<pow
                                    class="requiredFormItem">&nbsp;*</pow></label><select id="policyName"
                                name="policyName"></select>
                        </p>
                        <p>
                            <label for="partition">Custom Partition Name</label> <input
                                type="text" name="partition" id="partition" class="textField" />
                        </p>
                        <p>
                            <pow class="requiredFormItem">*&nbsp;</pow>
                            Required Fields
                        </p>
                        <p>
                            <input type="submit" id="importCampaignButton" class="submit"
                                value="Import" />
                        </p>
                    </form>

JavaScript:

function importObject(){
var options = {
        target: '#importForm',
        type: 'POST',
        url: hostServer + '/import',
        beforeSubmit: ShowRequest,
        success: function () {
            displayMessageDialog("File imported successfully", true);
        },
        error: function(e){
            displayMessageDialog("An AJAX error occured. " + JSON.stringify(e));
        }
};
$('#importForm').ajaxForm(options);
//$('#importForm').ajaxSubmit(options);
}

function ShowRequest(formData, jqForm, options) {
var queryString = $.param(formData);
alert('BeforeSend method: \n\nAbout to submit: \n\n' + queryString);
return true;
}

$(function() {
    importObject();
});

при нажатии "Отправить" это говорит мне:

 About to submit: ownerName=161&policyName=Global+Policy&partition=

На node.js:

Я слушаю сообщение в URL-адресе...

app.post('/import', campaigns.importCampaign2);

и печать...

exports.importCampaign2 = function (request, response){
utilities.debugLog('Import campaign...');
utilities.debugLog('request files? ' + request.files);
utilities.debugLog('request body? ' + JSON.stringify(request.body));
utilities.debugLog('request params? ' + JSON.stringify(request.params));
utilities.debugLog('request query? ' + JSON.stringify(request.query));

Но я, кажется, ничего не получаю...

request files? undefined
request body? {}
request params? {}
request query? {}

Я пытаюсь сделать форму с загрузкой файла, но она должна быть совместима с IE 9, поэтому я не могу использовать html5. Плагин формы JQuery работает, если я делаю ajaxSubmit (параметры), однако возвращаемый файл является... строкой '[file Object]' и параметром body, а не параметром файлов... Предполагалось, что форма была отправлена HAD, поэтому я Я пытаюсь сделать это другим способом в надежде, что он отправит фактический файл. Но он больше ничего не посылает...

Настройка app.js:

app.set('port', process.env.PORT || 3333);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.set('view options', {layout: false});
app.use(require('morgan')('dev'));
app.use(require('body-parser')({ keepExtensions: true}));
app.use(require('cookie-parser')());
app.use(require('express-session')({ secret: 'mySecret', store: new MemoryStore({ reapInterval: 600000}) }));
app.use(require('method-override')());
app.use(function(req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});
app.use(express.static(path.join(__dirname, '/public')));
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
next();
});

@mscdex Интересно! Он что-то посылает! Отключение body-parser было бы настоящей проблемой, но с этим я увидел свои ценности:

------WebKitFormBoundaryJo01BR3yUDBh094k
Content-Disposition: form-data; name="ownerName"

161
------WebKitFormBoundaryJo01BR3yUDBh094k
Content-Disposition: form-data; name="policyName"

Global Policy
------WebKitFormBoundaryJo01BR3yUDBh094k
Content-Disposition: form-data; name="partition"


------WebKitFormBoundaryJo01BR3yUDBh094k--
  • 0
    Если вы сбросите содержимое запроса ( request.on('data', function(d){ console.log(d.toString()); }); ) с отключенным промежуточным программным обеспечением анализатора тела, как будет выглядеть вывод ?
  • 0
    Разместите свой app.use() , возможно, у вас нет bodyparser.
Показать ещё 4 комментария
Теги:
express

2 ответа

1
Лучший ответ

Вы должны использовать многослойный модуль синтаксического анализа для запросов многочастных/форм-данных теперь с курьерским 4. Некоторых примеров таких модулей: Busboy (/Connect-помощник официанта/multer/реформированный) и грозный.

Причина заключается в Express 4, промежуточное ПО bodyParser() было извлечено в свой собственный модуль (body-parser), но этот новый модуль поддерживает только приложение /json и application/x-www-form-urlencoded, поэтому вам нужно отдельно использовать еще один модуль для обработки данных multipart/form.

  • 0
    Спасибо. Попытка сделать это сейчас вернется и скажет, сработало ли это.
  • 0
    Ага. Это была проблема. Большое спасибо. Занимался этим полтора дня.
1

я решил ту же проблему с сообщением. http://www.componentix.com/blog/9/file-uploads-using-nodejs-now-for-real

Ещё вопросы

Сообщество Overcoder
Наверх
Меню