Исключительная загрузка не работает: «файлы» не определены, нет ошибок

Я пытаюсь загрузить файл с помощью грозного, следуя руководству в книге начинающих узлов . После этого кода у меня есть серверные модули, которые передают объект запроса модулю requestHandler. На главной странице загружается форма со следующим обработчиком:

 function start(response) { console.log("Request handler 'start' was called."); var body = ''+ ''+ ''+ ''+ ''+ ''+ '<input type="file" name="upload" multiple="multiple"'+ ''+ ''+ ''+ ''; response.writeHead(200, {"Content-Type": "text/html"}); response.write(body); response.end(); } 

Когда форма отправляется, путь / upload запускает следующую функцию обработчика загрузки:

 function upload(response,request) { console.log("Request handler 'upload' was called."); var form = new formidable.IncomingForm(); console.log("about to parse"); form.parse(request, function(error, fields, files) { console.log("parsing done"); console.log(util.inspect({error: error, fields: fields, files: files})); fs.rename(files.upload.path, "/tmp/test.png", function(error) { if (error) { console.log(error); fs.unlink("/tmp/test.png"); fs.rename(files.upload.path, "/tmp/test.png"); } }); response.writeHead(200, {"Content-Type": "text/html"}); response.write("received image:
"); response.write(""); reponse.end(); }); }

Однако при нажатии кнопки загрузки сервер выходит из строя со следующей ошибкой:

 /home/****/Coding/nodebeginner/requestHandlers.js:38 fs.rename(files.upload.path, "/tmp/test.png", function(erro ^ TypeError: Cannot read property 'path' of undefined at /home/****/Coding/nodebeginner/requestHandlers.js:38:25 at IncomingForm. (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:104:9) at IncomingForm.EventEmitter.emit (events.js:92:17) at IncomingForm._maybeEnd (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:551:8) at Object.end (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:238:12) at IncomingMessage. (/home/****/Coding/nodebeginner/node_modules/formidable/lib/incoming_form.js:129:30) at IncomingMessage.EventEmitter.emit (events.js:92:17) at _stream_readable.js:920:16 at process._tickCallback (node.js:415:13) 

Таким образом, очевидно, что переменная files не определена. Я думал, что может быть ошибка, но нет переменной error в значение null . Так что я немного здесь. Идеи?

У меня была такая же проблема. Я думаю, что вы видите этот код строки в Node Beginner Book, в конце книги. Я исправил его, удалив следующий код в файле server.js:

 // req.setEncoding("utf8"); // req.addListener("data", function(postDataChunk) { // postData += postDataChunk; // }); // req.addListener("end", function() { // route(handle, pathname, res, req); // }); 
 Just do: 

route (handle, pathname, res, req);

 And last, you must be careful at html form tags. Sorry for my English and best wishes! ***VinRover Nguyen*** 

У меня тоже такая же проблема. В теге формы отсутствует закрывающая двойная кавычка (“) атрибута enctype.

Я застрял в той же проблеме. Звуки, такие как class загрузки, были заменены или написаны с ошибкой. Попробуйте изменить ссылку с files.upload.path на files.Upload.path. Он работает здесь. За дополнительной информацией обращайтесь к мастер-ветке: Git

Похоже, что у вас есть некоторые ошибки в вашем теле «var». Пытаться :

 var body = '' + '' + '' + '' + '' + '
' + '' + '' + '
' + '' + '';

Ошибка в именах параметров для обратного вызова в form.parse.

В книге Node Beginner Book показан код как:

 form.parse(request, function(error, fields, files) { //code } 

Параметры не должны быть множественными в функции обратного вызова:

 form.parse(request, function(error, field, file) { //code } 

Взгляните на IncomingForm.prototype.parse в /node_modlues/formidable/lib/incoming_form.js. Обратный вызов прослушивает единственное «поле» и «файл».