Я обеспокоен своим кодом, хотя он работает.
Как говорится в названии, это принято?Потому что в моей базе данных мне нужно выполнить Обещание 1, прежде чем перейти к Обещанию 2, потому что мне нужно получить доступ к переменным и результатам Обещания 1.
Итак, вкратце, то, что происходит в моей базе данных, таково:
- Вставить в: user_tbl, затем
- Вставить в: login_tbl
Обратите внимание, что в login_tbl есть столбец, который является внешним ключом user_tbl.Поэтому я должен сначала закончить вставку в user_tbl, иначе будет ошибка.
Кстати, я использую postgresql, knex.js и bcrypt Вот мой код:
//This is the function that handles the signup
const handleSignup = (req, res, db, bcrypt) => {
const { employeeId, username, password, firstName, lastName, positionSelect } = req.body;
const hash = bcrypt.hashSync(password);
if (!employeeId || !username || !password || !firstName || !lastName || !positionSelect) {
res.json({
haveEmpty: true
})
}
else{
db.transaction((trx) => {
db.select('*').from('user').where('employee_id', '=', employeeId)
.then(data => {
if(!data[0]){
db('user')
.returning('*')
.insert({
employee_id: employeeId,
username: username,
first_name: firstName,
last_name: lastName,
status: "Active",
position_id: positionSelect
})
.then(user =>{
db('login')
.returning('*')
.insert({
employee_id: employeeId,
username: username,
hash: hash
})
.then(login => {
if(login[0]){
res.json({
isSuccess: true
})
}else{
res.json({
isSuccess: false
})
}
})
.then(trx.commit)
.catch(trx.rollback);
})
.then(trx.commit)
.catch(trx.rollback);
}
else {
res.json('User already Exist!')
}
})
.then(trx.commit)
.catch(trx.rollback);
})
.catch(err => console.error(err));
}
}