nodejs查询mysql使用Promise作为回调

文章目录

    • 背景说明
    • 案例说明
      • 连接mysql数据库
      • 定义service,使用promise作为回调
      • Controller使用then方法获取mysql查询的数据

背景说明

使用mysql 数据库查询数据,当业务逻辑牵涉到多张表的时候,就会陷入`回调陷阱`,因此想借用前端Promise对象,来解决这个问题。
如果是针对多个service,也可以借用promise.all函数来解决,优化自己的代码

案例说明

连接mysql数据库

var mysql  = require('mysql');
var connection = mysql.createConnection({
    host     : '127.0.0.1',
    user     : 'root',
    password : '123456',
    port: '3306',
    database: 'weather',
});
connection.connect();
module.exports = connection;

定义service,使用promise作为回调

var mysqlConn = require('../common/mysqlConn');
const dataService = {
	// 查询最新的数据
	queryLatistDatasPromise: function (userCallback) {
		var promiseObj = new Promise(function(resolve, reject){
			mysqlConn.query(
				'select * from w_data ORDER BY id desc limit 0,1',
				[],
				function selectCb(err, results, fields) {
					// resolve 只能传递一个参数
					resolve({
						err: err,
						results: results,
						fields: fields
					});
				}
			);
		});

		return promiseObj;
	}
}
module.exports = dataService;

Controller使用then方法获取mysql查询的数据

var dataService = require('./service/dataService');
var router = express.Router();
// 获取最新的data数据
router.post('/getLatistData',function (req,res,next) {
    dataService.queryLatistDatasPromise().then(function(serviceResp){
        var results = serviceResp.results;
        var newResults = utilsObj.formatArrayOfDate(results, "time", 'YYYY-MM-DD  hh:mm:ss');
        if(results.length > 0) {
            res.json({
                state: 1, // 1表示状态成功, 0表示失败
                dataObj: newResults[0],
            });
        }else {
            res.json({
                state: 1, // 1表示状态成功, 0表示失败
                message: '没有数据',
            });
        }

    });
});

你可能感兴趣的:(nodejs,npm,express,gulp)