我送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,我需要在数据库中找到重复项,文件筛选器只检查当前数据中的重复字段。 –