Я работаю над приложением nodejs, используя грозный сторонний модуль. И я пытаюсь получить доступ к глобальной области видимости (см. Var formfields ниже) к полям веб-формы, возвращаемым методом form.parse ниже. Во-первых, form.parse - это асинхронная операция, и согласно документации модуля здесь: https://github.com/felixge/node-formidable предназначен для обратного вызова. Я делаю это, см. Анонимную функцию, переданную в form.parse.
Моя проблема в том, что независимо от того, что я делаю, я не могу заставить form.parse правильно возвращать объект полей в переменную formfields в глобальном контексте / области. Я пробовал (в течение нескольких дней) различные комбинации функций обратного вызова и замыканий, которые возвращают вторичные функции и т. Д. Но не повезло.
Основное, что я пытаюсь сделать, это:
var form = new formidable.IncomingForm();
form.encoding = 'utf-8';
var formfields = form.parse(req, function (err, fields, files) {
console.log("within form.parse method, subject field of fields object is: " + fields.subjects);
return fields;
}); // form.parse
console.log("type of formfields is: " + typeof formfields);
console.log("subject field of formfields object is: " + formfields.subjects);
Но, как вы увидите из вывода console.log ниже, несмотря на то, что я использую обратный вызов, выполнение "переходит" в последние 2 строки кода console.log - перед запуском строки console.log в форме .parse или правильное возвращение "полей" из form.parse и присвоение его 'var formfields'.
В частности, вывод console.log показывает, что form.parse возвращает объект (поля), которые становятся полями формы. Но в нем отсутствуют фактические данные формы (например, formfields.subjects), которые регистрируются как неопределенные. Последняя строка вывода показывает, что form.parse захватывает данные формы (fields.subjects, которые регистрируются как «биология»), но не возвращает их должным образом, чтобы они стали «var formfields».
type of formfields is: object
subject field of formfields object is: undefined
within form.parse method, subject field of fields object is: biology
У меня нет решения этой проблемы, поскольку у меня есть возможность просто получить доступ к данным поля и управлять ими из form.parse. Но у меня есть разные вещи, связанные с этими данными формы (запрос базы данных, форматирование результатов, возврат клиенту), и все они должны быть вложены в form.parse. Это выполнимо, но создает неудобный код. Я надеялся на решение своего вопроса, поскольку это сделает код более чистым. Спасибо заранее за любую помощь.