2015-09-18 65 views
3

我有一个mysql查询我试图执行与使用事务的节点mysql。它应该在连接对象上,但我得到的错误说它没有开始事务方法。节点mysql类型错误:conn.beginTransaction不是函数

TypeError: conn.beginTransaction is not a function

这里的交易代码:

dbutil.transaction(req.db, 

    function(done){ 

     req.db.query('INSERT INTO answers (question, user, background, importance, comment) values (?, ?, ?, ?, ?)', 
      [question, user, background, concurrence, importance, comment], function (err, result){ 
       console.log('result from insert query: ', result); 
       console.error('error: ', err); 
       done(); 
      // req.db.query('INSERT INTO concurrenceAnswers (concurrence) values (?)', 
      //  [concurrence], function (err, result){ 
      //   console.log('result form insert query: ', result); 
      //   console.error('error: ', err); 

      // }) 

     }); 


    }, function(){} 

    ); 

和交易方法:

exports.transaction = function(conn, body, done) { 
    conn.beginTransaction(function(err) { 
     if (err) return done(err); 

    body(function(err) { 
     if (err) return conn.rollback(function() { 
      done(err); 
     }); 

     conn.commit(function(err) { 
      if (err) return conn.rollback(function() { 
       done(err); 
      }); 

      done(); 
     }); 
    }); 
}); 
}; 

Req.db.query是:

var db = mysql.createPool({ 
connectionLimit: config.db.connectionLimit, 
host:   config.db.host, 
user:   config.db.user, 
password:  config.db.password, 
database:  config.db.database, 
port:   config.db.port 

} );

回答

2

当你使用,你需要首先从池中获取连接池(您不能直接使用的池开始交易一样可以成为查询):

exports.transaction = function(connection, body, done) { 

    connection.getConnection(function(err, conn) { 

    conn.beginTransaction(function(err) { 
     if (err) return done(err); 

     body(function(err) { 
     if (err) return conn.rollback(function() { 
      done(err); 
     }); 

     conn.commit(function(err) { 
      if (err) return conn.rollback(function() { 
      done(err); 
      }); 

      done(); 
     }); 
     }); 
    }); 
    }); 
}; 
相关问题