如何使用bluebird宣传MySql功能?

时间:2015-02-12 18:28:31

标签: mysql node.js bluebird

前段时间我决定从PHP切换到节点。在我的第一个项目中,我不想使用任何ORM,因为我认为我不需要复杂化我的生活那么多学习另一件事(目前我正在学习节点和角度)因此我决定使用mysql包而不用还要别的吗。重要的是要说我有一些复杂的查询,我不想从sctratch学习如何使用9000 ORM节点中的一个来使它们工作,这就是我到目前为止所做的:

thing.service.js

Thing.list = function (done) {
  db.query("SELECT * FROM thing...",function (err,data) {
    if (err) {
      done(err)
    } else {
      done(null,data);
    }
  });
};
module.exports = Thing;

thing.controler.js

Thing = require('thing.service.js');
Thing.list(function (err,data) {
  if (err) {
    res.status(500).send('Error D:');
  } else {
    res.json(data);
  }
});

如何使用蓝鸟宣传这种功能?我已经尝试了......但我在这里寻求帮助。这就是我试过的

var Thing = Promise.promisifyAll(require('./models/thing.service.js'));

Thing.list().then(function(){})

3 个答案:

答案 0 :(得分:12)

我这样做了,工作正常。

const connection = mysql.createConnection({.....});
global.db  = Bluebird.promisifyAll(connection);
db.queryAsync("SELECT * FROM users").then(function(rows){   
console.log(rows);});

答案 1 :(得分:8)

我从来没有好运过promisifyAll和IMO我更喜欢手动处理我的内部检查。以下是我将如何处理此问题的示例:

//ThingModule
var Promises = require('bluebird');

Things.list = function(params) {
 return new Promises(function(resolve, reject) {
   db.query('SELECT * FROM thing...', function(err, data) {
     return (err ? reject(err) : resolve(data));
   });

 });
}

//usage
var thinger = require('ThingModule');

thinger.list().then(function(data) {
   //do something with data
})
.error(function(err) {
  console.error(err);
})

答案 2 :(得分:1)

您还可以创建一个像这样触发SQL的函数: -

function sqlGun(query, obj, callback) {
    mySQLconnection.query(query, obj, function(err, rows, fields) {
        if (err) {
            console.log('Error  ==>', err);
            // throw err;
            return (err, null);
        }
        console.log(query)
        if (rows.length) {
            return callback(null, rows);
        } else {
            return callback(null, [])
        }
    });

}

mySQLconnection是mysql.createConnection({})之后的连接对象。

之后,您可以宣传该功能并使用以下承诺: -

var sqlGunPromise = Promise.promisify(sqlGun);
sqlGunPromise(query, {}).then( function() {} );