Я сделал 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,
})
});
});
Простой: мой вопрос заключается в том, что изображение должно загружаться, когда все проверки пройдены. в противном случае изображение не должно быть загружено. Пожалуйста, помогите мне Спасибо.
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
Вы можете выполнить проверку, если пользователь уже существует в отдельной функции, и сначала вызвать ее.
Я пробовал это, но когда я выполняю этот код
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-адрес изображения.
Сэр, вы можете дать мне фрагмент
Комментарий к коду предназначен для меня, поскольку я использую уникальное свойство мангуста: true в моей схеме.