Evitare errori Net.createConnection in Node
Attualmente sto realizzando un'app con React e Node.js
In questa app, ho bisogno di interrogare un database sul mio server con la seguente funzione, situata in un file separato chiamato "database.js"
const fetchQuery = util.promisify(con.query).bind(con)
// Get all the tracks for a given date from the
const fetchTracks = async (date) => {
const rows = await fetchQuery("SELECT * FROM tracks WHERE playlistDate = '"+date+"'");
}
Funziona perfettamente quando eseguo il file con Node dalla riga di comando. Tuttavia, quando provo a importarlo nella mia app React con
import { fetchTracks, addTracks } from '../scripts/database'
Comincio a ricevere errori nel file del database, in particolare Unhandled Rejection (TypeError): Net.createConnection is not a functiondurante la mia chiamata fetchQuery.
Da quello che ho letto, questo accade quando si tenta di chiamare la funzione dal browser, poiché ciò costituirebbe un rischio per la sicurezza. Tuttavia, a quanto ho capito, tutte le operazioni sui nodi vengono eseguite sul lato server, giusto? Perché dovrei ricevere questo flag quando si suppone che il database venga interrogato prima che la pagina venga pubblicata? Cosa devo fare per modificarlo?
Risposte
React viene eseguito nel browser, quindi non appena includi database.jsnella tua app React, viene eseguito nel browser con il resto di React, quindi ovviamente riceverai l'errore. Fare questo lavoro offre due opzioni:
esporre un endpoint API da Node for React per la chiamata e tale endpoint API chiama database.js oppure,
indagare sul rendering lato server per React, dove alcune delle tue app React, in particolare le parti più statiche come il menu principale, vengono create sul lato nodo e solo l'HTML finale viene inviato al browser. (Questo è un argomento ampio da solo però.)
Dal tuo esempio che accetta un parametro di data per l'SQL, immagino che il n. 2 non sia un'opzione.