2016-07-05 19 views
0

データベースにクエリを行い、結果が見つかったらファイルをアップロードします。現時点ではそれは逆です。最初に画像がアップロードされ、dbが検索され、更新されます。MongoDB/Multer DBをクエリしてファイルをアップロードします。

var multer = require('multer'); 
var upload = multer({ 
    dest: './public/images/usercontent', 
    limits: { 
     files: 1, 
     fields: 1, 
     fileSize: 10000 
    }, 
    fileFilter: function fileFilter(req, file, cb) { 
     if (file.mimetype !== 'image/png' && file.mimetype !== 'image/jpg' && file.mimetype !== 'image/jpeg') { 
      req.multerImageValidation = 'wrong type'; 
      return cb(null, false); 
     } 
     return cb(null, true); 
    } 
}).single('uploads[]'); 

router.post('/uploadimg', isLoggedIn, function(req, res, next) { 
    upload(req, res, function(err) { 
     if (err) { 
      if (err.code === 'LIMIT_FILE_SIZE') { 
       return res.send({ 
        statusText: 'fileSize' 
       }); 
      } 
      return res.send({ 
       statusText: 'failed' 
      }); 
     } 
     if (req.multerImageValidation) { 
      return res.send({ 
       statusText: 'wrongType' 
      }); 
     } 
     Company.findOneAndUpdate({ 
      ownedBy: req.user.local.username, 
      _id: req.body.cid // value that is sent with the image 
     }, { 
      icon: 'images/usercontent/' + req.file.filename 
     }, function(err, result) { 
      if (err) { 
       return res.send({ 
        statusText: 'failed' 
       }); 
      } 
      if (!result) { 
       return res.send({ 
        statusText: 'failed' 
       }); 
      } 
      res.send({ 
       statusText: 'success' 
      }); 
     }); 
     // 
    }); 
}); 

答えて

0

私が必要とする値、CID(req.body.cid)、これだけは私の現在、働いて、コードである、ということはちょっと物事を複雑にして呼ばれている()アップロード後にアクセスすることができますどうしてdbコマンドの成功コールバックを使って画像をアップロードし、アップロード画像関数のsuccessコールバックを使ってcidでdbレコードを更新しないのですか?非常に高いレベルでは、これは次のようになります。

query db for record 
    //if record found, in success callback 
    attempt to upload image 
     //if image uploaded successfully and cid generated, in success callback 
     update db record 

あなたはアトミック操作

を確保するためにはMongo 更新操作を使用することができます
関連する問題