如何在node-mysql中插入时选择行[0]?

时间:2015-02-28 00:42:22

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

我对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命令?它是在插入回调之前还是之后?目前,行[0]自然是未定义的。

2 个答案:

答案 0 :(得分:0)

使用async.waterfall怎么样?

我解决了类似的问题。

  1. 插入查询
  2. 从行[0]
  3. 获取auto_incremnet编号
  4. 选择查询
  5. 异步网站 https://github.com/caolan/async#waterfall

    另外,由于bcrypt是异步的,

    data,password = hash
    

    此代码无法正常运行。

    我想为你的代码执行相同类型的代码,但我不能。 所以,我在同步中使用bcrypt并传递哈希来查询。

答案 1 :(得分: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]);
                });
            });
        });
    });
});