【问题标题】:Formidable and Node.js TypeError: Cannot read property 'path' of undefined强大和 Node.js 类型错误:无法读取未定义的属性“路径”
【发布时间】:2015-05-11 06:57:16
【问题描述】:

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

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

我四处搜索,找到了thisthis,但它们都没有定论,也没有提供什么帮助。

【问题讨论】:

    标签: node.js typeerror formidable


    【解决方案1】:

    首先,教程确实以错误的顺序传递请求和响应。我做的第一件事是将订单从(response, request) 更改为(request, response)。 (确保在任何地方都这样做)。这样做的原因是因为我很确定HTTPcreateServer() 中的onRequest 函数按此顺序传递它们。

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

    ...
    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.35formidable@1.0.17 完成的。我不知道我的解决方案是否适用于所有人,但希望它可以为你们中的一些人指明正确的方向。差异可能是由于他在教程中使用了旧版本的 node 和强大的事实。

    【讨论】:

      【解决方案2】:

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

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

      应该是什么时候

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

      (将“日期”更改为“数据”)。解决这个问题使它对我有用。

      因此,请仔细查看您的 requestHandlers start() 函数中的 HTML 表单数据,看看是否有任何拼写错误导致文件无法正确上传。

      【讨论】:

        【解决方案3】:

        我遇到了同样的错误,因为输入字段的名称与 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");
        

        【讨论】:

          【解决方案4】:

          我遇到了同样的问题并挣扎了很多,最终发现我打错了。

          我输入的内容:

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

          应该是什么:

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

          注意form-data 中缺少的-

          【讨论】:

            猜你喜欢
            • 2022-01-21
            • 2018-02-26
            • 1970-01-01
            • 1970-01-01
            • 2021-11-03
            • 1970-01-01
            • 2022-11-30
            • 2018-04-29
            • 1970-01-01
            相关资源
            最近更新 更多