Вы были на правильном пути, только немного синтаксических проблем, которые я исправил.Я также переместил структуры записей таблицы из обработки вставки просто для ясности.
Стоит отметить, что .returning()
не работает ни с SQLite, ни с MySQL.(См. документация здесь ).Если вы используете любой из них, то вместо этого сохраните и верните данные из входных данных.
// separated record data for clearer code below
let loginData = { password: password,
email: user.email,
username: user.username };
let userData = { email: user.email,
username: user.username,
name: user.name,
joined: new Date() };
let profileData = { name: user.name,
image: image,
username: user.username };
let retUserName = null; // need to track the .returning() data after the .then is complete
let retUserData = null;
let retProfileData = null;
db.transaction(trx => {
return trx.insert(loginData).into('login').returning('username')
.then(retData => {
retUserName = retData[0]; // save the data outside of .then
return trx.insert(userData).into('users').returning('*')
})
.then(retData => {
retUserData = retData[0]; // save the data outside of .then
return trx.insert(profileData).into('profile').returning('*')
})
.then(retData => {
retProfileData = retData[0];
console.log({ 'userData': retUserData, 'profileData': retProfileData });
// console.log to be replaced by your response:
// res.json({ 'userData': retUserData, 'profileData': retProfileData });
})
});