Ultima modifica da un moderatore:
Ciao a tutti sto realizzando una web app che consiste in un quiz.
Sorvolando i dettagli del quiz, faccio uso di servizi azure (in particolare un database sql e di intelligenza artificiale).
Il motivo per cui sto aprendo questa discussione è perché ciò che dovrei fare è abbastanza banale ma mi sta dando problemi.
In pratica in node interrogo il database azure e faccio una select di 10 frasi che mi serviranno per un quiz, che mantengo in un array.
Una volta fatto ciò ho necessità di passare l'array da node (backend) a javascript frontend poichè lì saranno manipolati ed utilizzati.
Questo è il codice del backend:
Il punto è che così com'è realizzato la query viene effettuata una singola volta quando il server viene eseguito.
Ho invece necessità di fare la query ogni qualvolta il quiz viene fatto partire così da avere sempre nuove domande/frasi.
La cosa che mi blocca è il abbinare la logica di connessione e query al db con il passaggio dell'array ottenuto al frontend.
Nel codice sopra passo i dati facendo una post(/datidb), ci sono altri modi per passare dati da node a js?
Inoltre non riesco a chiudere la connessione al db.. se aggiungo una .close() la connessione viene chiusa prima ancora di aver preso i dati. Come posso far sì che la connessione si chiuda dopo che i dati sono stati presi (una specie di wait)?
Idealmente vorrei far in modo che ogni volta che l'utente raggiunge '/quiz.html' si faccia la query, si passino i dati al frontend e questi poi siano visibili a schermo.
Una cosa del tipo:
Come posso fare? Grazie in anticipo
Sorvolando i dettagli del quiz, faccio uso di servizi azure (in particolare un database sql e di intelligenza artificiale).
Il motivo per cui sto aprendo questa discussione è perché ciò che dovrei fare è abbastanza banale ma mi sta dando problemi.
In pratica in node interrogo il database azure e faccio una select di 10 frasi che mi serviranno per un quiz, che mantengo in un array.
Una volta fatto ciò ho necessità di passare l'array da node (backend) a javascript frontend poichè lì saranno manipolati ed utilizzati.
Questo è il codice del backend:
JavaScript:
const express = require('express');
const app = express();
const { Connection, Request } = require("tedious");
//configurazione per connessione a db (username, password, server ecc.)
const config = {
authentication: {
options: {
userName: "provadb", // update me
password: "REDACTED" // update me
},
type: "default"
},
server: "dbprova-server.database.windows.net", // update me
options: {
database: "dbprova", //update me
encrypt: true
}
};
const connection = new Connection(config);
//array che mantiene dati restituiti dalla query al db
var valore = [];
app.set('view engine', 'html');
app.engine('html', require('ejs').renderFile);
app.use(express.static(__dirname + "/views"));
connection.on("connect", err => {
if (err) {
console.error(err.message);
} else {
queryDatabase();
}
});
connection.connect();
//funzione che interroga il database e mantiene dati restituiti nell'array 'valore'
function queryDatabase() {
// Read all rows from table
const request = new Request(
`SELECT top 10 * FROM [dbo].[frasi]
order by newId()`,
(err, rowCount) => {
if (err) {
console.error(err.message);
} else {
console.log(`${rowCount} row(s) returned`);
}
}
);
request.on("row", columns => {
columns.forEach(column => {
valore.push(column.value)
//console.log("%s\t%s", column.metadata.colName, column.value);
});
});
connection.execSql(request);
}
app.get('/', function(req, res){
res.sendFile(__dirname + '/views/index.html')
});
//invio dati dal backend al fronted, dove saranno poi manipolati e mostrati a schermo
app.post('/datidb', function(req, res){
res.json(valore);
});
app.listen(3000, function(){
console.log('Ok server: 3000');
});
Il punto è che così com'è realizzato la query viene effettuata una singola volta quando il server viene eseguito.
Ho invece necessità di fare la query ogni qualvolta il quiz viene fatto partire così da avere sempre nuove domande/frasi.
La cosa che mi blocca è il abbinare la logica di connessione e query al db con il passaggio dell'array ottenuto al frontend.
Nel codice sopra passo i dati facendo una post(/datidb), ci sono altri modi per passare dati da node a js?
Inoltre non riesco a chiudere la connessione al db.. se aggiungo una .close() la connessione viene chiusa prima ancora di aver preso i dati. Come posso far sì che la connessione si chiuda dopo che i dati sono stati presi (una specie di wait)?
Idealmente vorrei far in modo che ogni volta che l'utente raggiunge '/quiz.html' si faccia la query, si passino i dati al frontend e questi poi siano visibili a schermo.
Una cosa del tipo:
JavaScript:
app.get('/quiz.html', function(req, res){
//interroga db e ottieni dati
//passa dati al frontend
//mostra quiz
});
Come posso fare? Grazie in anticipo