Я довольно новичок в Node и JS мире. То, что я пытаюсь добиться, - это «модулировать» мои запросы и повторно использовать их в различных сценариях. Это мой дб менеджер:Promisify Custom Method
'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? Можете ли вы предложить несколько лучших практик?
Для полноты вот мой method1, что выполнить запрос:
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')
})
}
}
Только возвращение прочь. =) Большое спасибо. Как бы вы считали этот скелет кода? – Jumpa
Я не уверен, как понять ваш вопрос. Если вы говорите о архитектуре кода, я бы сказал, что это просто. Похоже, вы не используете ORM, например Sequelize (вы можете посмотреть!). Попробуйте управлять всеми операциями SQL как простым уровнем доступа к данным. Нулевая бизнес-логика. Просто сосредоточьтесь на основных операциях CRUD и разделите свои сущности на модули узлов. Кроме того, обратите внимание на последовательность, продолжайте возвращать обещания. Если бы это было не так, ну, извините! – noKid