【问题标题】:How to select rows[0] while inserting in node-mysql?插入node-mysql时如何选择行[0]?
【发布时间】:2015-03-01 04:29:22
【问题描述】:

我对 nodejs 和回调还很陌生。这是我的问题,使用 passportJS 的 LocalStrategy 和 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],但我不知道应该如何实现 SELECT 命令?是在插入回调之前还是之后?目前, rows[0] 自然是未定义的。

【问题讨论】:

    标签: mysql node.js passport.js node-mysql


    【解决方案1】:

    使用 async.waterfall 怎么样?

    我解决了类似的问题。

    1. 插入查询
    2. 从 rows[0] 获取 auto_incremnet 编号
    3. 选择查询

    异步网站在这里 https://github.com/caolan/async#waterfall

    另外,由于 bcrypt 是异步的,

    data,password = hash
    

    此代码无法正常工作。

    我想为你的代码执行相同类型的代码,但我不能。 因此,我在 Sync 中使用 bcrypt 并将哈希传递给查询。

    【讨论】:

      【解决方案2】:

      这是我的解决方案:

      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]);
                      });
                  });
              });
          });
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-11-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-17
        • 1970-01-01
        • 2018-04-17
        相关资源
        最近更新 更多