router.post("/register", function (req, res) {
console.log(req.body);
// generate a salt
(async function(){
const salt = await bcrypt.genSalt(10);
// hash the password along with our new salt
const hash = await bcrypt.hash(req.body.txtPassword1, salt);
return hash;
})().then((data)=>{
var txtPassword = data;
let newUser = new userModel({
userName: req.body.txtUserName,
email: req.body.txtEmail,
profilePic: req.body.txtFileUpload,
password: txtPassword,
isAdmin: false
});
newUser.save((function (err) {
if (err) {
console.log("failed to save the new User ! : ", err);
} else {
console.log("New user has been added successfully with Id", newUser._id);
}
}))
req.flash('success', 'Registeration Successful');
console.log("Session value ", req.session);
console.log("value of txt password => ", txtPassword)
res.render("blogHome", { title: "Blogs || Home" });
});
});
Я хочу знать, является ли это правильным способом использования await.Мне пришлось прибегнуть к этому способу, потому что, когда я просто пытался использовать
var hash = await bcrypt.hash(req.body.txtPassword1,salt);
, я получал неожиданную ошибку идентификатора, когда я работал с приведенным выше кодом, и когда я гуглил, я обнаружил, что ожидание должно использоваться внутри асинхронноготаким образом, я обернул все это в сторону IIFE и использовал обычную обработку обещаний с помощью .then () Но я чувствую, что по незнанию я усложнил простую вещь.Кто-нибудь может указать самый простой способ сделать это.Причина, по которой я был вынужден использовать обещание, заключалась в том, что из-за асинхронного выполнения оператор сохранения базы данных всегда выполнялся до того, как был вычислен хеш, и это означало бы, что пароль пуст, что, в свою очередь, вызывает проверку схемы для поля пароля