From fe6f344f6441b7f1377da21b07c889093455ab6c Mon Sep 17 00:00:00 2001 From: paoloar77 Date: Thu, 17 Apr 2025 12:11:02 +0200 Subject: [PATCH] query migliorata --- src/server.js | 79 ++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 35 deletions(-) diff --git a/src/server.js b/src/server.js index 1ec073b..9492b0b 100644 --- a/src/server.js +++ b/src/server.js @@ -38,45 +38,54 @@ app.use((req, res, next) => { app.get('/test', (req, res) => { console.log('Il server risponde correttamente') res.status(200).json({ - success: true, - message: "Il server risponde correttamente" + success: true, + message: "Il server risponde correttamente" }); - }); +}); // Endpoint per eseguire query -app.post('/query', async (req, res) => { - try { - console.log('Connect con config...') - await sql.connect(config); - console.log('query...', req.body.query) - const result = await sql.query(req.body.query); - console.log(' ... tornato'); - if (result) { - console.log('Risultato:', result.recordset); - res.json(result.recordset); - } else { - res.json({}); - } - } catch (err) { - // se err.messagge === 'socket hang up' allora attendi 2 secondi e richiama sql.query - if (err.message.trim() === 'socket hang up') { - await new Promise((resolve) => setTimeout(resolve, 2000)); - const result = await sql.query(req.body.query); - console.log(' ... tornato'); - if (result) { - console.log('Risultato:', result.recordset); - res.json(result.recordset); - } else { - res.json({}); - } - } else { - console.error('Error...', err.message) - res.status(500).json({ error: err.message }); - } - } finally { - sql.close(); - } +const sql = require('mssql'); +app.post('/query', async (req, res) => { + let retry = false; + try { + + if (!req.body.query || typeof req.body.query !== 'string') { + return res.status(400).json({ error: 'Query non valida' }); + } + + console.log('Connect con config...'); + await sql.connect(config); + + const doQuery = async () => { + console.log('Eseguo query:', req.body.query); + const result = await sql.query(req.body.query); + console.log('Query completata'); + return result; + }; + + let result; + + try { + result = await doQuery(); + } catch (err) { + if (err.message.trim() === 'socket hang up' && !retry) { + console.warn('⚠️ socket hang up — attendo 5 secondi e riprovo...'); + retry = true; + await new Promise(resolve => setTimeout(resolve, 5000)); + result = await doQuery(); + } else { + throw err; + } + } + + res.json(result?.recordset || {}); + } catch (err) { + console.error('❌ Errore nella query:', err.message); + res.status(500).json({ error: err.message }); + } finally { + sql.close(); // chiude anche se fallisce + } }); const PORT = process.env.SERVER_PORT || 3000;