English help on website



hidemaru.createHttpServer(Ver9.43対応版)
目次JavaScript対応Hidemaruオブジェクト− createHttpServer
createHttpServerメソッドは、HttpServerオブジェクトを作成します。(V9.25以降)[非同期]
js{
  server = hidemaru.createHttpServer( function( request, response ){ } );
}
パラメータ1(関数 または オブジェクト)
httpリクエストがあったときに呼ばれる関数を指定します。
関数のパラメータ1はHttpRequest、パラメータ2はHttpResponseが与えられて呼ばれます。
オブジェクトは、オプションを指定します。オプションを指定した場合、パラメータ2で関数を指定します。

パラメータ2(関数、省略可能)
パラメータ1にオプションを指定した場合、関数をここで指定します。

返り値
HttpServerオブジェクトを返します。


createHttpServerで得られるHttpServerオブジェクトは、最小限の機能だけのhttpサーバーです。
GETのみです。レスポンスヘッダの指定はありません。
POSTはできません。Keep-Aliveは未定です。
Webページをホストするためのものではなく、URLを元にtext/plainでテキストの応答ができるだけです。
同一PC内のアクセスを想定していますが、CORS回避しているので関係無いところから接続が発生しないか注意が必要です。
固定のURLとなるのはテスト目的だけにして、実際にはランダムなポートと、後述のmakeKeyを使ってください。
jsmode "\\" + currentmacrofilename; //オブジェクトが他のマクロと被らないように固有の名前にしてください
js{
  server = hidemaru.createHttpServer(function(req, res) {
    if(req.url=="/abc"){
      res.writeHead(200);//OK
      res.write("Hello World" );
      res.end("requested url:"+req.url );
    } else {
      res.writeHead(404);//Not found
      res.end("");
    }
  });
  server.listen(54321);// http://localhost:54321/abc
}
endmacro;
オプション
パラメータ1にオブジェクトを指定する場合、オプションの指定ができます。
オプションに指定できるプロパティは以下の1つだけです。
プロパティ名 値の種類 意味
makeKey      数値     0以外を指定してkeyをランダムに自動設定します
オプションのmakeKeyを指定すると、URLの最初のパス部分がHttpServer.keyと一致していないとできないようになります。
jsmode "\\" + currentmacrofilename;
js{
  server = hidemaru.createHttpServer({makeKey:1},function(req, res) {
      res.writeHead(200);//OK
      res.end("Hello World Secure\r\n");
  });
  server.listen(0);//ランダムなポート
  input("URLです","http://localhost:"+server.port+"/"+server.key+"/foobar");
}
endmacro;

WebView2の問題
WebView2を使う場合、バージョンによってリクエスト関数内でのreq.url等が"function () { [native code] }"となってしまう問題があるようです。
その場合、以下のようにreq.urlをラップして、thenで取得するといいみたいです。
jsmode "WebView2\\"+currentmacrofilename;
js{
  function getReqUrl(req){
    return req.url;
  }
  server = hidemaru.createHttpServer(function(req, res) {
    getReqUrl(req).then(url => {
      res.writeHead(200);//OK
      res.end("Requested url:"+url );
    });
  });
  server.listen(54321);// http://localhost:54321/abc
}
endmacro;
これで回避できる理由は特に無いです。
createHttpServerができた当時は回避しなくてもできていました。このヘルプを書いている時点では問題になっています。いずれWebView2が直るかもしれません。
秀丸エディタとしては制御できないので、WebView2を使うことは推奨しません。

参照:
createHttpServer
HttpServer
HttpRequest
HttpResponse