Bonjour à tous,
Depuis quelques temps je dev une appli avec l'aide de VueJS et une API REST sous Node.js.
Mais voilà un problème que je n'arrive pas à résoudre depuis quelques temps.
lors d'un appel de mon API afin de récupérer la liste d'articles, par exemple, ma recherche se fait dans plusieurs requete SQL ainsi qu'un convertisseur de rtf2html (me demandez pas pourquoi, j'utilise la base de donnée d'un logiciel vraiment très... :'( )
voici mon code
exports.findByID = async function(req, res){
var id = req.params.id;
var vDevis = ''
var vRows = ''
// Récupère les infos du devis (l'entête)
var SQLquery = "SELECT * FROM W_DP.PCHANT as ch";
SQLquery += " LEFT JOIN W_DP.PCLIENT as cl ON cl.CLNCLI = ch.CHNCLI"
SQLquery += " LEFT JOIN W_DP.PPARETACH as et ON et.Ec_etach = ch.CHETATCH"
SQLquery += " WHERE ch.CHCPRO = '" + id + "'"
await sequelize.query(SQLquery).spread(function(rows, metadata) {
var data = '"devis": ';
for (var i = 0; i <= rows.length - 1; i++) {
data += `
{
"id": "`+rows[i].CHCPRO+`",
.............bla bla bla........
},`;
}
vDevis = data
})
// Récupére les lignes du devis
var SQLquery = "SELECT * FROM W_DP.PPROPOS as pr";
SQLquery += " LEFT JOIN W_DP.PPRODV as dv ON dv.PR_RANG = pr.PRNRAN AND dv.PR_DEVIS = pr.PRCDEV"
SQLquery += " WHERE PRCDEV = '" + id + "' AND PRENRE != 3 ORDER BY PRNRAN ASC"
await sequelize.query(SQLquery).spread(function(rows, metadata) {
var type = ''
// Init la variable de retour
var data = '"rows" : [';
for (var i = 0; i <= rows.length - 1; i++) {
// Stock le type de ligne dans la var {type} afin de pouvoir l'utiliser plus facilement plus bas.
if(rows[i].PRENRE === '0'){
type = 'title'
}else if(rows[i].PRENRE === '1'){
type = 'product'
}
let rRtf = null
// Le texte en RTF est contenu dans rows[i].PR_TXT
rtfToHTML.fromString(rows[i].PR_TXT, (err, html) => {
this.rRtf = html
})
data += `
{
"type": "`+type+`",
"rang": `+rows[i].PRNRAN+`,
"description": `+JSON.stringify(rows[i].PRTEXT)+`,
"description_long": `+JSON.stringify(rRtf)+`,
"qte": `+rows[i].PRQTEA+`,
"tva": `+rows[i].PRTVA+`,
"pu_ht": `+rows[i].PRPXOC+`,
"remise": `+rows[i].PRREM+`,
"total_ht": `+rows[i].PRHTX+`
`;
if (i === rows.length - 1){
data += '}';
}else{
data += '},';
}
}
data += ']';
vRows = data
});
var data = '{"results": {' + vDevis + vRows + '}}';
res.writeHead(200, {'Content-Type': 'application/json'});
res.end(data);
};
Et là problème, impossible de passer rtfToHTML en await, du coup je ne récupère jamais le texte converti en html.
Et là je me pose la question, ma gestion de async est-elle correct ?
Je ne pense pas que ma façon de faire soit la meilleur, je suis un autodidacte et je fais sûrement beaucoup d'erreur, d'où ma demande d'aide :)