質問: mysql.createConnection({ host : 'localhost', user : '****', password: '****', database: 'testdb' }); //レコード取得 function qSelect(){ // 接続 connection.connect(); //レコード取得 connection.query('SELECT * from testTb;', function (err, rows, fields) { if (err) { console.log('err: ' + err); } console.log('name: ' + rows[0].name); console.log('id: ' + rows[0].id); }); //接続終了 connection.end(); } ```
回答: > > browserifyを使用するとか、bundle.jsを使用するなど書かれているのですが、敷居が高く、どなたか教えて頂けないでしょうか。 > > > この一文が引っかかる。 もしかして、**index.htmlに``みたいなタグを仕込んで** ブラウザ上で使おうとしていない? もしそうなら下記の理由が合わさり不可能。 * ブラウザー上で使うJavaScriptにはそもそもrequireがない * JavaScriptは言語構造として他のファイルにアクセスしたり、他のネットワークに接続しにいく手段を持たない * ただし、AjaxというHTTP通信を行い後付でリソースを取得する事だけはブラウザーのAPIを利用して行う事が可能 > > Node.jsの概念 > > > Node.jsはGoogleがV8エンジンをオープンソースとして公開したから、 これをハックしてローカルで動かせばJavaScriptが動くぞというプロジェクト。 でも、JavaScriptには言語構造としてファイルを読み書きしたり、 ネットワークにアクセスする機能を持たない欠点があった。 そこでNode.jsのプロジェクトメンバー達は 「じゃあその部分をC++で書いて呼べるようにすればよくね?」 とC++で足りない機能を実装して解決した。 MySQLプロジェクトのJSファイルを開くと、`require('net')`と書いてある行がある。 これはC++のnetモジュール(TCP通信を行う)を読み込んで動作させる為、JavaScriptではどうあがいても無理。 > > browserifyを使用するとか、bundle.jsを使用する > > > こっちも気になると思うから概念だけ触れておこうか browserifyはNode.jsの世界で採用されている`require`機能を無理やりJavaScript世界に持ってくる機能を持ったコンパイラ。 Browserifyを使ってJSファイルをコンパイルすると、 まずそのJSファイルのソースコードをスキャンして、requireが書かれている行を読み取り依存JSファイルを集めて1個のファイルに凝縮する。 物理的には1個のファイルになるが、関数を使って上手く分離されており、お互いにお互いの変数等の領域にはアクセスは出来ない。 更にグローバル領域にrequireという関数を宣言して、 `require('xxx')`というコードが実行された時だけ各ファイルの中身を実行して機能を呼び出す事が出来るようになっている。 もちろん、ブラウザー上で吐き出されたファイルを実行しても C++で書かれた機能にアクセスすることは出来ず、 netモジュール等に依存しているnpmモジュールは利用することが出来ない。 > > で、どうすればいいの? > > > 実装が二段階になるけどしょうがないね。 * JavaScriptは代わりにMySQLと通信してくださいという、Ajax(単なるHTTPリクエスト)を投げる * Node.jsやPHP等のWebサーバーを構築。HTTPリクエストを受け取り、代わりにMySQLと通信を行いJavaScriptに結果を返す