ノードでのNet.createConnectionエラーの回避
現在、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呼び出しでエラーが発生し始めます。
私が読んだところによると、これはブラウザから関数を呼び出そうとしたときに発生します。これはセキュリティ上のリスクをもたらすためです。しかし、私が理解しているように、すべてのノード操作はサーバー側で実行されますよね?ページが提供される前にデータベースが照会されたと思われるのに、なぜこのフラグが表示されるのでしょうか。これを修正するには何をする必要がありますか?
回答
Reactはブラウザーで実行されるためdatabase.js、Reactアプリに含めるとすぐに、残りのReactと一緒にブラウザーで実行されるため、もちろんエラーが発生します。これを機能させるには、2つのオプションがあります。
Node for ReactからAPIエンドポイントを公開して呼び出し、そのAPIエンドポイントがdatabase.jsを呼び出す、または、
Reactのサーバー側レンダリングを調査します。Reactアプリの一部(特にメインメニューのような静的な部分)がノード側で作成され、最終的なHTMLのみがブラウザーに送信されます。(これはそれ自体が大きなトピックです。)
SQLの日付パラメーターを使用する例では、#2はオプションではないと思います。