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

时间:2015-03-09 23:21:16

标签: node.js typeerror formidable

如果您正在阅读本文,那么您可能会关注Manuel Kiessling的Node教程。完成本教程的文件上传部分时,我收到以下错误。

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

我四处搜索,找到了thisthis,但是它们非常不确定,并且没有提供任何帮助。

4 个答案:

答案 0 :(得分:1)

首先,本教程确实以错误的顺序传递请求和响应。我做的第一件事是将订单从(response, request)更改为(request, response)。 (确保无处不在)。这是因为我非常确定onRequest的{​​{1}}中的HTTP函数按此顺序传递它们。

一旦我这样做,我仍然得到同样的错误。但是记录来自我表单的信息

createServer()

我注意到... 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) { ... } node@0.10.35完成的。我不知道我的解决方案是否适用于所有人,但希望它能指出你们中的一些人正朝着正确的方向前进。这种差异可能是因为他在教程中使用了旧版本的节点和强大的功能。

答案 1 :(得分:0)

我遇到同样的问题,使用相同的教程。结果我在requestHandlers start()函数中输入了一个打印HTML表单的拼写错误。我有

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

应该是什么时候

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

(已更改&#34;日期&#34;至&#34;数据&#34;)。解决这个问题使它对我有用。

因此,请仔细查看requestHandlers start()函数中的HTML表单数据,看看是否存在阻止文件上传正确发生的拼写错误。

答案 2 :(得分:0)

我遇到了同样的错误,因为fs.rename试图使用输入字段的名称不同。

基本上要确保此行中的名称:

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

与这两行相同:

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

fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png");

答案 3 :(得分:0)

我遇到了同样的问题,并且为找到自己的错字而苦苦挣扎。

我输入的内容:

res.write('<form action="fileupload" method="post" enctype="multipart/formdata">');

应该是什么:

res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');

请注意-中丢失的form-data