【发布时间】:2017-11-16 09:58:43
【问题描述】:
我将 formData 发送到我的 express 应用,如下所示:
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);
};
我正在将一个新项目保存到我的猫鼬数据库中。现在一切正常。但我想使用 mongoose findOne() 检测重复项,而不仅仅是让 mongoose 在写入数据库时处理检测是否存在重复键。因为无论在这个阶段是否存在重复键,我的图像都会被上传。因为它只检测save()上的重复项
现在的问题是,在我的 express 应用程序中,当我使用 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() 函数来在.post() 之后获取formData,但这似乎不起作用。我不认为我可以这样做:
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 函数。
有什么建议吗?
【问题讨论】:
-
您是否尝试使用file filter 并在那里检查重复项?
-
不,我还没试过。我赶紧去看看。谢谢。
-
@rkm,我需要在数据库中查找重复项,文件过滤器只检查当前数据中的重复字段。
-
如果您有权访问
fileFilter内的请求数据,您可以签入数据库并根据响应拒绝重复。 -
@rkm 我玩过fileFilter,它解决了我的问题。如果您发布答案,我会接受。谢谢
标签: express mongoose multipartform-data multer