Как вставить данные JSON в 3 таблицы и ответить на данные 2 таблиц через JSON, используя knex и express.js - PullRequest
0 голосов
/ 10 октября 2018

Вставка данных JSON в 3 таблицы и ответ на данные 2 таблиц через JSON с использованием knex и express.js

Мы хотим вставить данные в таблицу входа в систему, пользователя и профиля, а затем ответить на данные таблицы пользователя и профилячерез JSON.

db.transaction(trx => {
      trx.insert({
          password: password,
          email: user.email,
          username: user.username
        })
        .into('login')
        .returning('username')
        .then(loginusername => {
             return trx('users')
                .returning('*')
                 .insert({
                  email: user.email,
                  username: loginusername,
                  name: user.name,
                  joined: new Date()
                  })
            .returning(user[0])
            .then(user => {
             return trx('profile')
                .returning('*')
                 .insert({
                  name: name,
                  image: image,
                  username: user.username
                  })
            .then(user => {
                 res.json(user[0], profile[0]);
                  })

          })

1 Ответ

0 голосов
/ 11 октября 2018

Вы были на правильном пути, только немного синтаксических проблем, которые я исправил.Я также переместил структуры записей таблицы из обработки вставки просто для ясности.

Стоит отметить, что .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 });
        })
});
...