2015-03-09 4 views
2

Если вы читаете это, вы, вероятно, следуете руководству Мануэля Кисслинга. Я получил следующую ошибку при заполнении части загрузки файла учебника.Formidable и Node.js TypeError: невозможно прочитать свойство «путь» неопределенного

fs.rename(files.upload.path, "img/img.jpg", function(error) { 
          ^
TypeError: Cannot read property 'path' of undefined 

Я искал вокруг, нашел this и this, но они были довольно неубедительными и предоставили небольшую помощь.

ответ

1

Во-первых, это правда, что учебник передает запрос и ответ в неправильном порядке. Первое, что я сделал, это изменить порядок от (response, request) до (request, response). (Обязательно делайте это везде). Причина этого в том, что я уверен, что функция onRequest в HTTPcreateServer() передает их в этом заказе.

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

... 
var form = new formidable.IncomingForm(); 
console.log("About to parse..."); 
form.parse(request, function(error, fields, files) { 

    console.log("Parsing done."); 
    console.dir(request.headers); 
    console.log(fields); 
    console.log(files); 
... 

Я заметил, что ключ fields содержал то, что я искал, и ключ files был пуст.

{ upload: '2015-03-08 14.54.06.jpg', 'Upload File': 'Submit' } 
{} 

Отсюда ясно, что я мог бы использовать fields.upload. С помощью этой функции была возвращена другая ошибка, которая не была бы строкой (или, по крайней мере, не была бы той, которая была бы приемлемой). toString(), похоже, не работает, либо, так что я использовал альтернативное преобразование:

fs.rename(fields.upload + "", "img/img.jpg", function(error) { 
    ... 
} 

который не является идеальным, но он сделал трюк.

Это было сделано с [email protected] и [email protected]. Я не знаю, будет ли мое решение работать для всех, но, надеюсь, он может указать некоторым из вас в правильном направлении. Несоответствие, вероятно, связано с тем, что он использовал более старые версии узла и грозным в учебнике.

0

У меня была такая же проблема, с тем же учебником. Оказывается, у меня была опечатка в функции requestHandlers start(), которая печатает форму HTML. Я имел

'<form action="/upload" enctype="multipart/form-date" ' + 

, когда он должен был

'<form action="/upload" enctype="multipart/form-data" ' + 

(изменено "дата" в "данные"). Укрепление этой проблемы заставило ее работать на меня.

Итак, внимательно посмотрите на данные формы HTML в функции requestHandlers start() и посмотрите, есть ли какие-либо опечатки, препятствующие правильной загрузке файла.

0

У меня была такая же ошибка, потому что имя поля ввода было иным, как пыталось использовать fs.rename.

основном быть уверены, что имя в этой строке:

'<input type="file" name="UPLOADEDIMAGE">'+ 

Есть так же, как этого 2 строки:

fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png", function(err) { 

fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png"); 
Смежные вопросы