Node/Expressjs: прекратить публикацию изображения пользователя, если электронная почта пользователя уже существует

Я сделал API для регистрации пользователя и подтвердил его уникальным адресом электронной почты и именем. Но проблема в том, что API работает идеально и не публикует новый пользователь, если у пользователя тот же адрес электронной почты или имя, но промежуточное программное обеспечение изображения работает, но я хочу, чтобы это изображение было загружено, когда все проверки пройдены. Вот код.

/ 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.info(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,
            

        })
    });

});

Простой: мой вопрос заключается в том, что изображение должно загружаться, когда все проверки пройдены. в противном случае изображение не должно быть загружено. Пожалуйста, помогите мне Спасибо.

Комментарий к коду предназначен для меня, поскольку я использую уникальное свойство мангуста: true в моей схеме.

work space 23.12.2020 23:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
196
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Когда вы используете такой порядок, функция загрузки будет выполняться первой, независимо от того, сделаете ли вы какую-либо проверку в своей анонимной функции.

Вы должны поменять порядок и использовать next(), если проверка прошла успешно.

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

Проверка SIr исходит из свойства Mongoose Schema unique:true

work space 24.12.2020 00:39

Вы можете выполнить проверку, если пользователь уже существует в отдельной функции, и сначала вызвать ее.

Bidzina Aivazashvili 24.12.2020 00:59
Ответ принят как подходящий

Я пробовал это, но когда я выполняю этот код

        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
         });

я получил ошибку, что ОШИБКА: не удается прочитать свойство «имя файла», и это произойдет, потому что ПО multer middler выполняется позже

Вы можете добавить imageUrl позже, если проверка прошла успешно. Если вы сначала используете multer, вы загрузите изображение на сервер, и если проверка не удалась, у вас все еще будет бесполезное изображение на вашем сервере, и вы не сможете откатиться. Поэтому сначала используйте проверку, затем создайте пользователя, затем загрузите изображение и обновите URL-адрес изображения.

Bidzina Aivazashvili 24.12.2020 01:10

Сэр, вы можете дать мне фрагмент

work space 24.12.2020 23:17

Другие вопросы по теме