【发布时间】:2016-09-30 18:35:56
【问题描述】:
我对 Node 和 JS 世界还很陌生。我试图实现的是“模块化”我的查询并在各种场景中重用它们。这是我的数据库管理器:
'use strict'
const mysql = require('mysql')
var Promise = require('bluebird')
var using = Promise.using
Promise.promisifyAll(require('mysql/lib/Connection').prototype)
Promise.promisifyAll(require('mysql/lib/Pool').prototype)
const config = require('./config')
var pool = mysql.createPool({
connectionLimit: 100,
host: config.dbHost,
user: config.dbUser,
password: config.dbPassword,
database: config.db,
debug: config.dbDebug
})
var getConnection = function () {
return pool.getConnectionAsync()
.disposer(function (connection) {
return connection.release()
})
}
var query = function (command) {
return using(getConnection(), function (connection) {
return connection.queryAsync(command)
})
}
module.exports = {
query: query
}
在一个单独的文件中,我想调用一个查询,并根据该结果 然后 调用另一个(第二个使用第一个的结果值):
utils.method1()
.then(function (value) {
utils.method2(value)
})
.catch(function (error) {
console.error('Error while retrieving product id: ' + error)
res.json({ data: error })
})
我怎样才能“承诺”我的方法? 更重要的是:这是分离 mySQL 查询的正确方法吗?您能提出一些最佳做法吗?
为了完整起见,这是我执行查询的方法1:
module.exports = {
method1: function () {
// ...sql
db.query(mysql.format(sql, params))
.then(function (results) {
return results[0].id // clearly this is not a promise
})
.catch(function (error) {
console.error('Error while retrieving...: ' + error)
res.status(500).send('Internal server error')
})
}
}
【问题讨论】:
标签: mysql node.js promise bluebird node-mysql