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)
。 (确保到处都是这样)。 原因是因为我很确定HTTP
的createServer()
的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.35
和formidable@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");