node.js で、Katana の Welcome ページ を動して遊ぶ
※2013/12/2 頂いたコメントをもとに修正しました。
本当は、node.js で ASP.NET Web API を動かしたかったのですが、いろいろ引っかかってできませんでした。ということで、途中までの Welcome ページ を表示するとこまで書いておきます。ぐだぐだです。
2段階に分けました。
- node.js で OWIN に接続し、C# で書いた簡単なコードを動かす。
- node.js で OWIN に接続し、Katana の Middleware である Welcome ページ を適用させる。
Node.js ソリューションを用意する
Visual Studio を開き、ファイル>新しいプロジェクトから「Blank Node.js Web Application」を選択します。
作成されたソリューションに、C# のプロジェクトを追加します。ソリューションエクスプローラで、ソリューションを右クリック>追加>新しいプロジェクトの追加で、「クラスライブラリ」を選択。
Class1.cs が追加されているので、これを「Startup.cs」に直しておきます。
以上でできあがったソリューションはこんな感じ。
node.js + OWIN + C#
簡単な C# を動かしてみます。
C#: OWIN の Startup クラスを用意
NuGet で「Owin」を C# プロジェクトの方にインストールし、Startup.cs を下の様に書きます。
using Owin; using System; using System.Collections.Generic; using System.Threading.Tasks; using System.IO; namespace MyApp { using AppFunc = Func<IDictionary<string, object>, Task>; public class Startup { public void Configuration(IAppBuilder app) { app.Use(new Func<AppFunc, AppFunc>(next => async env => { env["owin.ResponseStatusCode"] = 200; ((IDictionary<string, string[]>)env["owin.ResponseHeaders"]).Add( "Content-Length", new string[] { "53" }); ((IDictionary<string, string[]>)env["owin.ResponseHeaders"]).Add( "Content-Type", new string[] { "text/html" }); StreamWriter w = new StreamWriter((Stream)env["owin.ResponseBody"]); w.Write("Hello, from C#. Time on server is " + DateTime.Now.ToString()); await w.FlushAsync(); })); } } }
node.js: npm でパッケージをインストール
node.js のプロジェクトでは、2つのパッケージを使います。Web アプリのフレームワークの王道「express」と、OWIN に接続するための「connect-owin」です。
(OWIN 接続にするためのパッケージとしては、他にも 「edge」があるみたい。)
npm というとこを右クリックし、manage npm package を選択。
左は「Local Packages」タブ、右は「Search npm Repository」タブを開きます。
右側の Find のところに「express」を入力し、表示された「express」を選択後、下の「install Locally」を押します。
同様に、「connect-owin」のパッケージもインストールします。
インストールが完了すると、ソリューションエクスプローラにこのように表示されます。
node.js: server.js のコード
server.js は以下の様に書きます。
var owin = require('connect-owin'), express = require('express'); var app = express(); app.all('/', owin('../MyApp/bin/Debug/MyApp.dll')); // ... app.listen(3000);
"MyApp.dll" のところで、先ほど書いた C# の dll を参照しています。なので、C# のプロジェクト名に合わせて書き換える必要があります。(上は、プロジェクト名が「MyApp」の例)
実行
一度、ソリューションのリビルドを行ってから、F5 でデバッグ実行します。「http://localhost:3000」にアクセスすると、下のように表示されるはずです。
node.js + OWIN + C# + Katana-Middleware
次は、Katana の Welcome ページを表示させる Middleware を適用させてみます。
C#: Startup.cs のコード
C# のプロジェクトの方に NuGet で「Microsoft.Owin.Diagnostics」をインストールし、Startup.cs を下のように書きます。
using Owin; using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.Owin.Diagnostics; using Microsoft.Owin; using Microsoft.Owin.Infrastructure; namespace MyApp { public class Startup { public void Configuration(IAppBuilder app) { SignatureConversions.AddConversions(app); app.UseWelcomePage(); } } }
実行
再びリビルドを行い、F5 でデバッグ実行し、「Http://localhost:3000」にアクセスすると、下の用に Welcome ページが表示されます。
ASP.NET Web API を動かそうとしてみましたが、わからず…。