2017-03-02 12 views
0

upload()機能のerrorステートメントがトリガーされていますが、フォームの送信が処理されなくなり、my ifステートメントのエラーの半分に示されているようにリダイレクトが送信されません。 .postルートには、ルートメソッドの残りの部分を実行させるルートがありません。Expressjsマルチパートのアップロードに失敗しましたが、POSTが終了しました

アップロード変数定義の不正なファイル拡張形式は、エラーをスローするものです。

POST

.post(function(req, res){ 
     var s3FilePath = []; 

     upload(req, res, function(err){ 
      if(err){ 
       req.flash('error', err); 
       res.redirect(req.get('referer')); 
      } 

      var uploadedFiles = req.files; 

      //Configure Uploaded S3 File Path strings based on environment for use in DB 
      for (var prop in uploadedFiles){ 
       console.log(uploadedFiles[prop].key); 
       if (app.get('env') === 'production' || app.get('env') === 'staging'){ 
        s3FilePath = 'https://files.test-site.com/' + uploadedFiles[prop].key; 
       } else { 
        s3FilePath.push(uploadedFiles[prop].location); 
       } 
      } 

      models.Blog.create({ 
       title: req.body.title, 
       type: req.body.type, 
       userId: req.user.userId  
      }).then(function(blog){ 
       var files = _.map(s3FilePath, function (file) { 
        return { 
         file: file, 
         blogId: blog.blogId 
        }; 
       }); 
       return models.BlogFile.bulkCreate(files); 
      }).then(function(){ 
       req.flash('info', 'Blog was successfully created.'); 
       res.redirect('/app'); 
      }); 
     }); 
    }); 

upload変数定義:

var upload = multer({ 
     storage: multerS3({ 
      s3: s3, 
      bucket: options.Bucket, 
      contentType: multerS3.AUTO_CONTENT_TYPE, 
      acl: options.ACL, 
      key: function(req, file, cb){ 
       var fileNameFormatted = file.originalname.replace(/\s+/g, '-').toLowerCase(); 
       cb(null, req.user.organizationId + '/' + uploadDate + '/' + fileNameFormatted); 
      } 
     }), 
     fileFilter: function(req, file, cb){ 
      if(!file.originalname.match(/\.(jpg|jpeg|png|gif|csv|xls|xlsb|xlsm|xlsx)$/)){ 
       return cb('One of your selected files is not supported', false); 
      } 
      cb(null, true); 
     } 
    }).array('fileUpload', 5); 

答えて

1

は、リダイレクト後にreturn文を追加します。スクリプトが実行を継続することが不可欠であることを忘れないでください。 res.end()を使用して後続のすべての要求を終了します。

if(err){ 
      req.flash('error', err); 
      res.redirect(req.get('referer')); 
      return; 
     } 

リダイレクトコールは、コードの状態の流れを変更しない、それが唯一のルートを変更し、このように次のラインは違法であり、不正ファイル拡張子フォーマットをスローvar uploadedFiles = req.files;であるが実行されます。

+0

それは私のために働いた – Remario

+0

それは完全に働いた。詳細な説明をいただきありがとうございます – cphill

関連する問題