Node/Expressjs: 如果用户邮箱已经存在,停止发布用户图片

Node/Expressjs: Stop Posting The User Image If user email already exist

我已经为用户注册创建了 API 并使用唯一的电子邮件和名称对其进行了验证。但问题是 API 运行完美并且不 post,新用户,如果用户具有相同的电子邮件或名称但图像的中间件运行但我希望图像应该上传所有验证清楚。这是代码。

/ Making The Storage using Multer 
 var storage = multer.diskStorage({
  destination: function (req, file, cb) { cb(null, './UserImages') },
   filename: function (req, file, cb) { cb(null, Date.now() + file.originalname) }
 })
const upload = multer({
    storage: storage
 })
 // Making The Storage using Multer 

 // Posting Users to the Db With Collection Name UserCluster
 Router.post('/RegisterUser',upload.single('UserImage'), (req, res,) => {

//1 Manual Api for testing Uniqueness of Data.
// RegisterUserModel.findOne({ $or: [{ Name: req.body.name }, { Email: req.body.email }] }).then(UserExist => {
//     console.log(UserExist);
//     if (UserExist) {
//         if (UserExist.Email==req.body.email) {
//             res.json({
//                 Message: 'User Already Exists With This Email',
//                 Data: null
//             });
//         }
//         else if(UserExist.Name==req.body.name){
//             res.json({
//                 Message: 'User Already Exists With This UserName',
//                 Data: null
//             });
//         }
//         else{
//             res.json({
//                 Message: 'User Already Exists With This UserName and Email',
//                 Data: null
//             });
//         }
//     }
//     else {
//         const _RegisterUser = new RegisterUserModel({
//             Name: req.body.name,
//             Email: req.body.email,
//             Mobile: req.body.mobile,
//             Password: req.body.password,
//             ImageUrl: req.file.filename,
//             ImageName: req.file.originalname,
//             ImageMimeType: req.file.mimetype,
//             Address: req.body.address
//         });
//         _RegisterUser
//             .save()
//             .then(result => {
//                 res.json({
//                     Message: "User Register Successfully",
//                     Data: result
//                 })
//             })
//             .catch(err => {
//                 res.json({
//                     Error: err.message,

//                 })
//             });
//     }
// })

const _RegisterUser = new UserCluster({
    Name: req.body.name,
    Email: req.body.email,
    Mobile: req.body.mobile,
    Password: req.body.password,
    ImageUrl: req.file.filename,
    ImageName: req.file.originalname,
    ImageMimeType: req.file.mimetype,
    Address: req.body.address
});
_RegisterUser
    .save()
    .then(result => {
        res.json({
            Message: "User Register Successfully",
            Data: result
        })
    })
    .catch(err => {
        res.json({
            Error: err.message,
            ErrorObject:err,
            Data:null,
            

        })
    });

});

简单:我的问题是当所有验证都清楚后图像应该上传。如果不是,则不应上传图像。请帮助我谢谢。

Router.post('/RegisterUser', uploadFunction, (req, res) => {
   ...
});

当你使用这样的命令时,无论你是否在你的匿名函数中进行了一些验证,上传功能都会先执行。

如果验证成功,您应该调换顺序并使用next()

Router.post('/RegisterUser', (req, res) => {
   ...
   if(validated) next(); // to go on next function (uploadFunction)
}, uploadFunction);

我已经试过了,但是当我执行这段代码时

        const _RegisterUser = new UserCluster({
            Name: req.body.name,
            Email: req.body.email,
            Mobile: req.body.mobile,
            Password: req.body.password,
            ImageUrl: req.file.filename,
            ImageName: req.file.originalname,
            ImageMimeType: req.file.mimetype,
            Address: req.body.address
         });

我收到 ERROR:Cannot 读取 属性 'filename' 的错误,它会出现,因为 multer 中间件稍后执行