ノードでのNet.createConnectionエラーの回避

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を使用してファイルを実行すると完全に機能します。ただし、reactアプリにインポートしようとすると

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

データベースファイル、特にUnhandled Rejection (TypeError): Net.createConnection is not a functionfetchQuery呼び出しでエラーが発生し始めます。

私が読んだところによると、これはブラウザから関数を呼び出そうとしたときに発生します。これはセキュリティ上のリスクをもたらすためです。しかし、私が理解しているように、すべてのノード操作はサーバー側で実行されますよね?ページが提供される前にデータベースが照会されたと思われるのに、なぜこのフラグが表示されるのでしょうか。これを修正するには何をする必要がありますか?

回答

3 RonNewcomb Sep 29 2020 at 02:49

Reactはブラウザーで実行されるためdatabase.js、Reactアプリに含めるとすぐに、残りのReactと一緒にブラウザーで実行されるため、もちろんエラーが発生します。これを機能させるには、2つのオプションがあります。

  1. Node for ReactからAPIエンドポイントを公開して呼び出し、そのAPIエンドポイントがdatabase.jsを呼び出す、または、

  2. Reactのサーバー側レンダリングを調査します。Reactアプリの一部(特にメインメニューのような静的な部分)がノード側で作成され、最終的なHTMLのみがブラウザーに送信されます。(これはそれ自体が大きなトピックです。)

SQLの日付パラメーターを使用する例では、#2はオプションではないと思います。