Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2009

Mysql och node JS = Backend

Hej

Jag har en Backend som hämtar en db med hjälp av:
Mysql och NPM = Node JS Backend

Som sedan ska skicka resultatet till min Frontend app. Backend kod:

// Övning med routes const express = require('express'); const app = express(); let cors = require('cors'); var mysql = require('mysql'); app.use(express.json()); app.use(cors()); const port = 3001; let sqlSelect = 'SELECT * FROM data'; let count = 0; runSQLConn(sqlSelect); setInterval(runSQLConn, 1000, sqlSelect); function runSQLConn(sqlSelect) { console.log('23'); count+= 1; console.log('Runda:'); console.log(count); console.log(sqlSelect); console.log('14'); console.log(sqlSelect); var con = mysql.createConnection({ host: "localhost", user: "root", password: 'htrhftyjd', database: 'scheduleapp' }); con.connect(function(err) { if (err) throw err; console.log("Ansluten till DB :)"); //sendSelectToSql(sqlSelect); con.query(sqlSelect, function (err, resultToFrontend) { console.log(resultToFrontend); if (err) throw err; // Send the SQL into the Frontend App ============================================================================= runAppGetRequests(resultToFrontend); //return resultToFrontend; }); }); //con.destroy(); } app.post('/SQLData/filter', (req, res) => { sqlSelect = `SELECT ${req.body.select} FROM data`; console.log('49'); runSQLConn(sqlSelect); res.status(201).send(); }); function runAppGetRequests(resultToFrontend) { app.get('/SQLData', (req, res) => { console.log('56'); console.log(resultToFrontend); res.status(201).send(resultToFrontend); }); console.log('-----------------------------------'); } function runAppRequests(resultToFrontend) { } /* function sendSelectToSql(sqlSelect){ } */ //} /* function appGet(resultToFrontend){ console.log('37'); } */ app.listen(port, () => console.log(`getSQLData is listening on port ${port}!`));

Testar så därav /**/

Det jag vill är att när ny eller jag förändrar sql db så vill jag att min data uppdateras automatisk. Problemet är att efter ett otal avslutningar så får jag:
Error: ER_CON_COUNT_ERROR: Too many connections. Har provat att köra --> con.destroy();

Resutatet är att jag inte kan köra get och ingen data kommer?

Hur löser jag detta?

Mvh Fredrik

Computer: Windows 10, 64-bit, Intel i7 - 8700K, Asus ROG STRIX Z370-F GAMING, 16GB RAM and Asus GTX1080

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Trädvy Permalänk
Medlem
Plats
Uppsala
Registrerad
Dec 2011

Felet beror på att du inte stänger anslutningarna, efter ett antal frågor når du taket på antalet anslutningar och inga fler kan skapas.

Jag antar att du stänger en anslutning med:
con.close() eller con.disconnect()
Vet ej vad con.destroy() gör.

Trädvy Permalänk
Forumledare
f.d. screamin-daemon
Registrerad
Jan 2005

@freddehboy Vänligen förtydliga rubriken i enlighet med §3.1.

Synpunkter eller frågor gällande modereringen? Då kan du kontakta mig eller moderatorerna.
Danskjävel så stavar som en kratta..

Trädvy Permalänk
Medlem
Plats
Västra Frölunda
Registrerad
Maj 2004
Citat:

Terminating a connection gracefully is done by calling the end() method

Citat:

An alternative way to end the connection is to call the destroy() method. This will cause an immediate termination of the underlying socket.

end() känns mer rätt, då jag tolkar det som att destroy() helt sonika dödar anslutningen på klient-sidan utan att meddela servern.

EDIT:
Sen kan ju connection pooling kanske vara av intresse också, för att återanvända anslutningarna istället för att skapa nya hela tiden.

as far as we can tell, the massacre went well...

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2009

Mysql och node JS = Backend

Ska testa

Computer: Windows 10, 64-bit, Intel i7 - 8700K, Asus ROG STRIX Z370-F GAMING, 16GB RAM and Asus GTX1080

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2009
Skrivet av Kent:

@freddehboy Vänligen förtydliga rubriken i enlighet med §3.1.

Hur fixar jag det? Provade men rubriken är fortfarande samma?

Blev fel rubrik då jag skrev!

Computer: Windows 10, 64-bit, Intel i7 - 8700K, Asus ROG STRIX Z370-F GAMING, 16GB RAM and Asus GTX1080

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Aug 2007

Ett tips är att spana in knex.js för att dels underlätta connection-hanteringen samt dina queries.
http://knexjs.org/

Trädvy Permalänk
Medlem
Registrerad
Jul 2017
Skrivet av luddecraft:

Ett tips är att spana in knex.js för att dels underlätta connection-hanteringen samt dina queries.
http://knexjs.org/

MySQL projektet han importerat har redan stöd för pooling.

Sedan bör OP även escapea sina queries och inte bara ta emot de i blindo.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Aug 2007
Skrivet av JeanC:

MySQL projektet han importerat har redan stöd för pooling.

Sedan bör OP även escapea sina queries och inte bara ta emot de i blindo.

Ja, och knex.js använder samma lib i botten för anslutningen till MySQL...

Det hela handlar ju om convenience. Genom att använda knex.js så slipper användaren själv skriva logiken för att skapa poolen, stänga connections etc.

Trädvy Permalänk
Medlem
Registrerad
Jul 2017
Skrivet av luddecraft:

Ja, och knex.js använder samma lib i botten för anslutningen till MySQL...

Det hela handlar ju om convenience. Genom att använda knex.js så slipper användaren själv skriva logiken för att skapa poolen, stänga connections etc.

Vet inte om pool.query(queryn, parameter, result) som är en shortcut för getConnection, .query och .release är så jävla krångligt att jag behöver en wrapper som gör samma sak; bara extra overhead.

https://github.com/mysqljs/mysql#pooling-connections

Min poäng är att knex i det här fallet gör det hela krångligare.

--
EDIT:
Igen: mysql biblioteket har det INBYGGT med pooling och escaping av parametrar.

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Aug 2007

Min poäng är att knex i detta fallet gör det hela enklare.
Dels så gömmer den undan all hantering av pool och du får dessutom automatisk escaping av parametrar samt att du enklare kan bygga upp komplicerade queries.

Trädvy Permalänk
Medlem
Plats
Helsingborg
Registrerad
Jan 2009

Ska titta på Knex senare. Tack för tipset

Computer: Windows 10, 64-bit, Intel i7 - 8700K, Asus ROG STRIX Z370-F GAMING, 16GB RAM and Asus GTX1080

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S.