Node-REDでWebサーバを作ってみる

今回はNode-REDでWebサーバを作ってみます。といっても、イチから作るのは面倒なので、以前紹介したサンプルフローを読み込んで動きを確認します。

サンプルフローの読み込みと動作確認

メニューの「読み込み」から「サンプル > flows > node-red > network > http > 01 - Create HTTP Endpoint」を選択して「読み込み」を選択します。


フローエディタにそれっぽいものが表示されたら「デプロイ」して準備完了です。上部の「Create an HTTP Endpoint」のコメントが入っている箇所がWebサーバの実装(たった3ノード!)、下部の「Send HTTP request: http://localhost:1880/hello」のコメントが入っている箇所が動作確認のためのフローです。

2つあるinjectノードのどちらでもいいので、ボタンを選択してフローを実行してみましょう。デバッグウィンドウに「Hello World」を含むHTMLが出力されます。


このままブラウザから「http://localhost:1880/hello」にアクセスしてみると、ブラウザ上に「Hello World」と表示されるはずです。

ノードプロパティ

念のため各ノードの設定を見ていきます。
  • Webサーバ
    • http inノード
      • URL: /helloGETメソッドによるアクセスを待ち受けます
    • templateノード
      • msg.payloadにHTMLを設定して、次のノードにmsgオブジェクトを渡します
      • 今回のサンプルでは、固定のHTMLを指定しているだけですが、Mustacheテンプレートと呼ばれるタグと値を別々に指定して動的に文字列を構築することもできます
    • http responseノード
      • msg.payloadの内容をbody部に指定して、HTTPレスポンスを返します
      • http inノードで受けたリクエストは、必ずhttp responseノードでレスポンスを返さなくてはいけません
      • http responseノードでレスポンスを返さないと、クライアントがタイムアウトします(タイムアウトを実装していなければ永久に待ち続けます)
  • HTTPクライアント1
    • injectノード
      • プロパティに値を設定することなく単にフローの起動だけ行います
    • http requestノード
      • ノードプロパティ上でURLに「http://localhost:1880/hello」を指定します
      • フローが実行されると指定したURLにリクエストを送りレスポンスを待ちます
    • debugノード
      • msg.payloadの内容をログ出力します
  • HTTPクライアント2
    • injectノード
    • http requestノード
      • URLには何も指定しません(一つ前のinjectノードで指定する)
      • フローが実行されるとURLにリクエストを送りレスポンスを待ちます
    • debugノード
      • msg.payloadの内容をログ出力します

まとめ

サンプルフローを利用して、何も考えなくてもWebサーバができました。今回読み込んだサンプルは静的なページしか表示しないので面白みはありませんが、ページに表示する内容を動的に変更できるサンプルもあるので適当に読み込んでみると良さそうです。

コメント

このブログの人気の投稿

Joinノードを使う(その1)

Execノードを使う

Joinノードを使う(その4)