我有這個代碼:
const saltRounds = 10;
let charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
module.exports.addUser = async (req, res) => {
try {
let userData = req.body;
let email = userData.email;
for (i = 0; i <= 15; i ) {
let randomNumber = Math.floor(Math.random() * charset.length);
password = charset.substring(randomNumber, randomNumber 1);
}
bcrypt.hash(password, saltRounds, function (err, hash) {
password = hash;
userData.password = password;
});
} catch (err) {
console.log(err);
res.status(500).json("Server error");
}
};
我從前端獲取資料,然后生成一個隨機密碼,并將其添加到 userData 變數中。
我現在想要的是呼叫該函式在資料庫中創建一個用戶:
const newUser = await User.createUser(userData, res);
并且能夠請求我剛剛從資料庫創建的用戶在創建后使用它來制作其他東西:
const user = await User.getUser(email);
我嘗試了不同的東西,但每次我都遇到執行順序的問題。例如,該程式嘗試在創建之前獲取用戶資訊等......
uj5u.com熱心網友回復:
如果在創建用戶時它們已經可用,我不知道為什么要再次獲取詳細資訊。
const newUser = await User.createUser(userData, res);
// newUser has all the values you're trying to fetch
如果未指定呼叫,bcrypt hash 將回傳 promise
module.exports.addUser = async (req, res) => {
try {
let userData = req.body;
let email = userData.email;
for (i = 0; i <= 15; i ) {
let randomNumber = Math.floor(Math.random() * charset.length);
password = charset.substring(randomNumber, randomNumber 1);
}
const hash = await bcrypt.hash(password, saltRounds)
if(hash) {
password = hash;
userData.password = password;
}
//then the create user promise code
} catch (err) {
console.log(err);
res.status(500).json("Server error");
}
};
諾言不是這樣運作的。按順序處理承諾,你可以做這樣的事情
let newUserData = null
Promise.all([ User.createUser(userData, res), User.getUser(email);])
.then((result) => newUserData = result[0]);
// the result will be an array the 1st element will be the response of User.createUser(userData, res) and respective other
讓我知道這是否有幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/435672.html
