我送FORMDATA我明確的應用程序,像這樣:貓鼬 - FindOne()內Multer
itemFactory.saveItem = function(item, callback){
var formData = new FormData();
for(var i = 0; i < item.photos.length; i++){
formData.append('photos', item.photos[i]);
}
for(var key in item){
formData.append(key, item[key])
}
return $http.post('/api/item/', formData, {
transformRequest: angular.identity,
headers: { 'Content-Type': undefined }
}).success(callback);
};
我保存到我的貓鼬DB的新項目。現在一切都運轉良好。但是我想使用mongoose findOne()
來檢測重複項,而不僅僅是讓mongoose處理檢測寫入數據庫時是否存在重複密鑰。因爲無論在這個階段我的圖片都會上傳,如果有重複的密鑰存在或不存在。因爲它只檢測到save()
現在的問題,在我的快車應用程序中,當我使用findOne()
時,Multer()尚未解碼我的formData。例如:
router.post('/item', function(req, res){
Vehicle.findOne({ id: String(req.body.id) }, function(error, item){
var storage = multer.diskStorage({...})
var upload = multer({
storage: storage
}).any();
upload(req, res, function(error){
//formData is only available here via req.body
//and not at findOne() stage.
});
});
});
我不能做findOne上傳裏面,因爲這樣的文件將被上傳無論如何,然後只檢測一個副本。
我嘗試了另一個multer().any()
函數獲取formData剛好在.post()
後但似乎沒有工作。我不認爲我能做到這一點:
var detectItem = multer().any()
detectItem(req, res, function(){
Vehicle.findOne({ id: String(req.body.id) }, function(error, item){
var storage = multer.diskStorage({...})
var upload = multer({
storage: storage
}).any();
upload(req, res, function(error){
//formData is only available here via req.body
//and not at findOne() stage.
});
})
它似乎並不喜歡我在一個multer函數內使用一個multer函數。
有什麼建議嗎?
你嘗試使用[文件過濾器(https://github.com/expressjs/multer#filefilter)和重複檢查呢? – rkm
不,我還沒有嘗試過。我很快會去看看。謝謝。 –
@rkm,我需要在數據庫中找到重複項,文件篩選器只檢查當前數據中的重複字段。 –