Как избежать ошибок Net.createConnection в Node

Sep 23 2020

В настоящее время я создаю приложение с React и Node.js

В этом приложении мне нужно запросить базу данных на моем собственном сервере с помощью следующей функции, расположенной в отдельном файле с именем «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+"'");
}

Это отлично работает, когда я запускаю файл с помощью Node из командной строки. Однако, когда я пытаюсь импортировать его в свое приложение для реагирования с помощью

import { fetchTracks, addTracks } from '../scripts/database'

Я начинаю получать ошибки в файле базы данных, особенно Unhandled Rejection (TypeError): Net.createConnection is not a functionпри вызове fetchQuery.

Из того, что я читал, это происходит при попытке вызвать функцию из браузера, так как это может создать угрозу безопасности. Однако, насколько я понимаю, все операции узла выполняются на стороне сервера, не так ли? Почему я должен получать этот флаг, если якобы база данных запрашивается до обслуживания страницы? Что мне нужно сделать, чтобы это исправить?

Ответы

3 RonNewcomb Sep 29 2020 at 02:49

React запускается в браузере, поэтому, как только вы включаете database.jsприложение React, оно запускается в браузере вместе с остальной частью React, поэтому вы, конечно же, получите сообщение об ошибке. Выполнение этой работы дает два варианта:

  1. предоставить конечную точку API из Node для React для вызова, и эта конечная точка API вызывает database.js или,

  2. исследуйте рендеринг на стороне сервера для React, где некоторые из ваших приложений React - в частности, более статические его части, такие как ваше главное меню - создаются на стороне узла, и только окончательный HTML-код отправляется в браузер. (Хотя это большая тема сама по себе.)

По вашему примеру, который принимает параметр даты для SQL, я предполагаю, что № 2 не вариант.