我将图片上传到mongoDb时有自定义验证。原始名称应该是唯一的。如果它通过验证,代码将正常运行。但如果失败,就会产生错误。它表示带有2个参数的自定义验证器在mongoose> = 4.9.0中已弃用。有没有其他方法来验证原始名称的唯一性?还是一种捕捉错误的方法?请帮忙。
router.post('/upload',function(req,res){
Item.schema.path('originalname').validate(function(value, done) {
Item.findOne({originalname: value}, function(err, name) {
if (err) return done(false);
if (name) return done(false);
done(true);
});
});
upload(req,res,function(err, file) {
if(err){
throw err;
}
else{
var path = req.file.path;
var originalname = req.file.originalname;
var username = req.body.username;
var newItem = new Item({
username: username,
path: path,
originalname: originalname
});
Item.createItem(newItem, function(err, item){
if(err) throw err;
console.log(item);
});
console.error('saved img to mongo');
req.flash('success_msg', 'File uploaded');
res.redirect('/users/welcome');
}
});
});
模型
var ItemSchema = mongoose.Schema({
username: {
type: String,
index: true
},
path: {
type: String
},
originalname: {
type: String
}
});
var Item = module.exports = mongoose.model('Item',ItemSchema);
module.exports.createItem = function(newItem, callback){
newItem.save(callback);
}
答案 0 :(得分:0)
您可以为该字段提供唯一性,例如: -
var ItemSchema = mongoose.Schema({
username: {
type: String,
index: true
},
path: {
type: String
},
originalname: {
type: String,
unique:true // this string will be unique all over the database
}
});
var Item = module.exports = mongoose.model('Item',ItemSchema);
module.exports.createItem = function(newItem, callback){
newItem.save(callback);
}
答案 1 :(得分:0)
要在保存到db之前验证唯一性,可以尝试findOne
使用tour filename:
router.post('/upload',function(req,res){
Item.findOne({originalname: req.file.originalname}, function(err, name) {
if (err) return done(false); // errors
if (name) return done(false); // check for existence of item here
done(true);
});
});
如果findOne函数没有响应任何数据,则意味着集合中没有相同原始名称的文档,您可以继续将文档添加到集合中