Unikanie błędów Net.createConnection w Node
Obecnie tworzę aplikację za pomocą React i Node.js.
W tej aplikacji muszę wysłać zapytanie do bazy danych na moim własnym serwerze za pomocą następującej funkcji, znajdującej się w oddzielnym pliku o nazwie „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+"'");
}
Działa to doskonale, gdy uruchamiam plik w Node z wiersza poleceń. Jednak gdy próbuję zaimportować go do mojej aplikacji do reagowania z rozszerzeniem
import { fetchTracks, addTracks } from '../scripts/database'
Zaczynam otrzymywać błędy w pliku bazy danych, szczególnie Unhandled Rejection (TypeError): Net.createConnection is not a functionw wywołaniu funkcji fetchQuery.
Z tego, co przeczytałem, dzieje się tak podczas próby wywołania funkcji z przeglądarki, ponieważ stanowiłoby to zagrożenie dla bezpieczeństwa. Jednak, jak rozumiem, wszystkie operacje na węzłach są wykonywane po stronie serwera, prawda? Dlaczego otrzymuję tę flagę, gdy baza danych jest rzekomo przeszukiwana przed udostępnieniem strony? Co muszę zrobić, aby to zmienić?
Odpowiedzi
React działa w przeglądarce, więc jak tylko database.jsdołączysz do swojej aplikacji React, będzie działał w przeglądarce razem z resztą Reacta, więc oczywiście otrzymasz błąd. Wykonanie tej pracy daje dwie opcje:
udostępnić punkt końcowy API z Node do wywołania React, a punkt końcowy API wywołuje bazę danych.js lub,
zbadaj renderowanie po stronie serwera dla Reacta, gdzie niektóre z twoich aplikacji React - w szczególności bardziej statyczne jej części, takie jak menu główne - są tworzone po stronie węzła i tylko ostateczny kod HTML jest wysyłany do przeglądarki. (Jest to jednak sam w sobie obszerny temat).
W twoim przykładzie, który przyjmuje parametr daty dla SQL, domyślam się, że # 2 nie jest opcją.