Formidable和Node.js TypeError:无法读取未定义的属性“path”

如果你正在阅读这篇文章,你可能会遵循Manuel Kiessling的Node教程。 在完成教程的file upload部分时,我收到以下错误。

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

我search了一下,发现了这个 ,但是他们相当不确定,没有提供什么帮助。

首先,教程确实是按照错误的顺序传递请求和响应。 我做的第一件事是把顺序从(response, request)(request, response) 。 (确保到处都是这样)。 原因是因为我很确定HTTPcreateServer()onRequest函数按照这个顺序传递它们。

一旦我这样做,我仍然有同样的错误。 但通过logging从我的forms来的信息

 ... 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 。 使用这个返回另一个错误,它不是一个string(或者至less不是一个强大的将接受)。 toString()似乎也没有工作,所以我使用了替代转换:

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

这不是理想的,但它伎俩。

这是用node@0.10.35formidable@1.0.17完成formidable@1.0.17 。 我不知道我的解决scheme是否适用于所有人,但希望可以让你们中的一些人走向正确的方向。 这种差异可能是由于他在教程中使用了旧版本的节点和强大的事实。

我遇到了同样的问题,使用相同的教程。 原来,我在打印HTML表单的requestHandlers start()函数中有一个input错误。 我有

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

当它应该是

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

(将“date”更改为“数据”)。 解决这个问题使它适用于我。

所以,请仔细看看requestHandlers start()函数中的HTML表单数据,看看是否有任何错误的file upload不正确。

我有同样的错误,因为input字段的名称是不同的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");