2015-02-28 2 views
0

Я довольно новичок в nodejs и обратных вызовах. Вот моя проблема, используя passportJS LocalStrategy и игровой узел-MySQL:Как выбрать строки [0] при вставке в node-mysql?

exports.register = new LocalStrategy(strategyOptionsRegister, function(req, username, password, done) { 

    //get data from the request 
    var data = { 
     username: username, 
     email: req.body.email, 
     password: password 
    }; 
    console.log('data : ', data); 

    //Hash passwords 
    bcrypt.genSalt(10, function(err, salt) { 
     if (err) return next(err); 

     bcrypt.hash(password, salt, null, function(err, hash) { 
      // Store hash in your password DB. 
      if (err) return next(err); 

      data.password = hash; 

      //insertion 
      connection.query('INSERT INTO USERS SET ?', data, function(err, rows) { 
       if (err) { 
        console.log(err); 
        return next("Mysql error, check your query"); 
       } 
       return done(null, rows[0]); 
      }); 
     }); 
    }); 
}); 

Я пытаюсь вернуть строки [0], содержащие все данные, но я не знаю, как я должен реализовать ВЫБЕРИТЕ команду? Это до или после обратного вызова для вставки? На данный момент строки [0], естественно, не определены.

ответ

0

Вот мое решение:

exports.register = new LocalStrategy(strategyOptionsRegister, function(req, username, password, done) { 

    //get data from the request 
    var data = { 
     username: username, 
     email: req.body.email, 
     password: password 
    }; 

    //Hash passwords 
    bcrypt.genSalt(10, function(err, salt) { 
     if (err) { 
      return done(err); 
     } 

     // Store hash in your password DB. 
     bcrypt.hash(password, salt, null, function(err, hash) { 
      if (err) { 
       return done(err); 
      } 

      data.password = hash; 

      //insertion 
      connection.query('INSERT INTO USERS SET ?', data, function(err, rows) { 
       if (err) { 
        return done(null, false, { 
         message: 'Mysql error, check your query !' 
        }); 
       } 
       // to return all the info in rows[0] 
       connection.query('SELECT * FROM USERS WHERE email = ?', data.email, function(err, rows) { 
        if (err) { 
         return done(null, false, { 
          message: 'Email not found !' 
         }); 
        } 
        return done(null, rows[0]); 
       }); 
      }); 
     }); 
    }); 
}); 
0

Что касается использования async.waterfall?

Я решаю аналогичную проблему.

  1. вставка запрос
  2. прибудет auto_incremnet число из рядов [0]
  3. выберите запрос

сайт асинхронном здесь https://github.com/caolan/async#waterfall

Кроме того, как Bcrypt является асинхронным,

data,password = hash 

этот код не работает должным образом.

Я хочу выполнить такой же тип кода для вас, но я не могу. Итак, я использую bcrypt в Sync и передаю хэш для запроса.

Смежные вопросы