[Visual Studio] Nodeサーバとの連携

Hello,Worldまでできたので、前に作ったNodeサーバと連携してみます。MySQLのデータをNode.jsのWebサーバ経由で読み込みということですね。

たいしたことするわけでなくて、HttpWebRequestで取得したデータをLabelに設定するだけです。

プログラムにサーバへのhttpリクエストを追加。

Form1.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net; //Http系クラス使用のため
using System.IO;

namespace HelloWorldApplication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            label1.Text = "Hello,World!";

            try
            {
                string url = "http://localhost/" ;

                WebRequest request = (WebRequest )WebRequest.Create(url);
                WebResponse response = request.GetResponse();
                Stream stream = response.GetResponseStream();
                StreamReader reader = new StreamReader(stream, System.Text. Encoding.UTF8);
                string result = reader.ReadToEnd();
                reader.Close();
                stream.Close();

                label1.Text = result;
            }
            catch(Exception ex)
            {
                label1.Text = ex.Message;
            }
        }
    }
}

MySQLサーバとNode.jsサーバを起動したのちに、プログラム実行。

20140101_vs_16

取得できました。HTMLで返してるので、そのまま設定されています。

きっと最新の開発環境だからJSONにしとけばいいでしょ、って適当な考えから通信をJSON化。数項目なのでサーバ側は手動JSON。

helloWorldDBJSON.js

var sys = require('sys');
var http = require('http');
var mysql = require('mysql');

var server = http.createServer(
function (request,response){

     var connection = mysql.createConnection({
          host: 'localhost',
          database: 'personal',
          user: 'root',
          password: 'password'
     });

     response.writeHead(200, {'Content-Type' : 'application/json'});

     var query = connection.query('SELECT name,voice FROM pokemon ORDER BY name');

     var resultObject = new Object();
     var count = 0;

     query
          .on('error', function(err) {
              console.log('Error!: ', err );

               response.write('Error!\n');
            })
     //結果用
            .on('result', function(row) {
                    if(count == 0)
                    {
                         response.write('{"result": [');
                    }else{
                         response.write(',');
                    }
                    count++;
                    response.write('{');
                    response.write('"name": "' + row.name + '",');
                    response.write('"voice": "' + row.voice + '"');
                    response.write('}');
                    console.log('write Record Data');
          })

            .on('end', function() {
               response.write(']}');
              console.log('response End');
               response.end();
               connection.end();
       });
}
).listen(80);
sys.log('Server is running!');

プログラム再起動。JSONで返ってきてることを確認。

20140101_vs_17

さーて、あとはJSONパースするか、と調べてみました。きっと標準でいろいろJSON関連のライブラリが揃っていると思ったら…そうでもなかった。クライアントも手動JSONなのか?いや、それはさすがにちょっとな…。ということで、中途半端ですが、ここまでです。


今回、Surface Pro 2 + Visual Studio Express でほんの少しだけコード書いたわけですが、指の操作でコードをスクロールさせることができないのが、結構なストレスになりました。指でドラッグすると、選択操作になっちゃいます。まあ、マウスドラッグと同じなのでそりゃそうなんですが。わかってても、Webブラウザと行き来してると、ついついやっちゃうんですよね…。