nodejsウェブアプリケーション開発_2021

Webアプリケーションって何?

What is Web applications?

https://www.sei-info.co.jp/it-keyword/summary_webapplication.html

HTML、JavaScriptについての入門書は色々ありますが、下記のMDNのページが英語、日本語、中国語など色々な言語に翻訳されているので、今回のトレーニングでは下記の資料を使います。

There are many introductory books on HTML and JavaScript, but the following MDN pages seems to be good to start because there are a lot of documents translated into various languages such as English, Japanese and Chinese.

https://developer.mozilla.org/

まずは下記の「HTML を始めよう」を題材に1回目の講習を行います。

First of all, I would like to hold the first training session on the subject “Getting Started with HTML”.

日本語 (Japanese):https://developer.mozilla.org/ja/docs/Learn/HTML/Introduction_to_HTML/Getting_started

英語 (English): https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/Getting_started

中国語 (Chinese): https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Introduction_to_HTML/Getting_started

imgタグとaタグを使って、画像のアイコンをクリックすると、Googleにジャンプするボタンを作り、それをHTMLファイルとして保存し、ブラウザで表示させる。

Google Chromeを使用します。インストールしておいてください。

https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/What_is_JavaScript

https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Variables   https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Math   https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Strings   https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Useful_string_methods https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/conditionals

練習問題:このページのHTMLをメモ帳などに貼り付けて、Javascriptが動作するか見てみる。Javascriptが動いたら、ここの「様々な結合」という動きをするようにHTMLに記述する。

練習問題2:問題1のHTMLについて、“水圏生物工学”とダイアログに入力された場合のみ、「ようこそ」とalert関数で表示するボタンを作る。

メモ:ChromeでF12キーを押して、開発者ツールを開き、「Console」タブを開いて、そこにJavascriptを記述する。ChromeのConsole内での改行は「Shift+Enter」で改行できる。

https://developer.mozilla.org/ja/docs/Learn/JavaScript/First_steps/Arrays   https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Looping_code

連想配列 Dictionary with Key/Value pairs

日本語:https://techplay.jp/column/528

English: https://pietschsoft.com/post/2015/09/05/javascript-basics-how-to-create-a-dictionary-with-keyvalue-pairs

https://developer.mozilla.org/ja/docs/Learn/JavaScript/Objects/Basics

https://developer.mozilla.org/ja/docs/Learn/JavaScript/Client-side_web_APIs/Manipulating_documents

練習問題:このページのリストの適当な項目にChromeのConsoleからいくつか色を付けてみる。.style.colorプロパティなどを使ってみるなど。

  1. “XHTML image map test (XHTML browsers only)“の項目の文字の色を赤にする。(リンク以外の文字の色が変わればOK。もちろん、リンクの色も変えるように変更してもOK。) .style.colorプロパティを使用。
  2. querySelectorAllでliをすべて列挙し、偶数番目の項目に対してのみ背景色を黄色にする。 .style.backgroundColorを使用。 偶数かどうかは、演算子「% (剰余算、余り)」を使う。

JavaScriptの関数とお絵描きをやってみる予定です。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/canvas https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Functions https://developer.mozilla.org/ja/docs/Learn/JavaScript/Building_blocks/Return_values   https://developer.mozilla.org/ja/docs/Web/Guide/HTML/Canvas_tutorial/Drawing_shapes

課題1:2つの数字を引数を受けとり、大きいほうの数字を戻してくれる関数を作る。

課題2:3つの図形をランダムな場所に10個ずつ描画する。(下記のステップで進めてみると良いかも。)

1.3つの関数を作る
 違う形を描画する3つの関数を作る
2.引数で描画開始地点を指定できるようにする。
3.ループの中で、ランダムに描画開始地点を指定して10個ずつ図形を描く。

いよいよサーバ側の開発に移行します。 これまでは、ChromeのJavaScript実行エンジンを使ってましたが、サーバではJavaScriptの実行環境としてNodeJSというプログラムを使います。NodeJSのインストールを行う必要があるので、下記のWEBサイトにアクセスしてバージョン14.17.0 LTSをインストールしておいてください。

日本語:https://nodejs.org/ja/

English: https://nodejs.org/en/

https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/Introduction

https://developer.mozilla.org/ja/docs/Learn/Server-side/Express_Nodejs/skeleton_website

https://www.sejuku.net/blog/28449

練習1:/testにアクセスしたら、”Express”ではなくて、“Test2”というタイトルが表示されるように変更する。

練習2:Expressの文字をサーバの現在時刻に変更する。

PUGの練習をします。

日本語:https://qiita.com/c2997108/items/fee5d2ca1d2e524823e5

日本語:https://docs.qranoko.jp/static/pug.html#variable

日本語:https://tr.you84815.space/pug/language/iteration.html

English:https://www.sitepoint.com/a-beginners-guide-to-pug/

課題:このページを再現するようにPUG+JSを書いてみる。

1.上記ページの下記の4項目程度を再現するようにPUGを書いてみる。(リンクも再現すること。)

・Object test (not actively maintained)
・Object test - results
・Java applet test (not actively maintained)
・Java applet test - results

2.index.jsのほうで、下記のように配列を定義して1項目「・Object test (not actively maintained)」がリンク付きで出力されるPUGを書く。

router.get('/', function(req, res, next) {
  let data = ["object/", "Object test", "(not actively maintained)"];
  res.render('index', { title: 'Express', data: data });
});

3.JSのほうで、下記のようにulのIDごとにリンク先のURL、リンクの本文、リンクの後ろの文字列、を入れた連想配列を作成し、その配列を受け取ってeach文で展開するPUGを書く。

  let data = {object:[
               ["object/", "Object test", "(not actively maintained)"],
               ["object/results", "Object test - results", ""]
              ],
              java:[
               ["object/java/", "Java applet test", "(not actively maintained)"],
               ["object/java/results", "Java applet test - results", ""]
              ]};

・クライアントのHTMLフォームから、サーバのNodeJSにデータを渡す

https://developer.mozilla.org/ja/docs/Learn/Forms/Sending_and_retrieving_form_data

日本語:

https://qiita.com/Yuuma-ujimoto/items/bc55ecddf4d0302b2992

https://qiita.com/TakeshiNickOsanai/items/b1720dcbe2bb5f9e524f

English: http://www.w3big.com/nodejs/nodejs-express-framework.html

課題

1.フォームの値をGETメソッドで受け取れていることを、console.logで確認する

2.受け取った値をindex.pugに渡して、ブラウザの画面上のどこかに表示する

3.GETからPOSTに変更しても、クライアントからデータを正しく受け取って、ブラウザ画面上のどこかに表示する

・サーバ側で外部プログラムを起動した結果を、PUGに変数で渡してクライアントのWEBブラウザに表示する

日本語:

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions

https://www.javadrive.jp/javascript/function/index16.html#section2

https://tkybpp.hatenablog.com/entry/2016/04/25/163246

https://tech.chakapoko.com/nodejs/file/list.html

https://www.gesource.jp/weblog/?p=8216

English:

https://stackoverflow.com/questions/46482424/how-to-get-textual-stdout-from-console-logrequirechild-process-execsyncls

課題

1.Expressの実行フォルダの中に適当なファイルを作り、そのファイル名をNodeJSのfsを使って表示する。

2.上記ファイルをNodeJSのfsを使って消す。

必須要件1:expressで動作するWEBアプリケーションを作成し、「http://localhost:3000/list/」にアクセスすると、サーバ上の特定のフォルダ(例:/opt/blast/dbとか、C:\opt\blast\dbとか)の中にある、ファイルの一覧を表示する。ファイルのリストの左横にはチェックボックス、ページ上部か下部に「削除」ボタンを表示し、「削除」ボタンを押すと、選択したチェックボックスのファイルを削除する。

必須要件2:「http://localhost:3000/upload/」にアクセスすると、FASTAファイルをアップロードして、BLASTDBを作成するページを作成する。例:http://suikou.fs.a.u-tokyo.ac.jp/upload_sequenceserver/ 。 BLASTDBの作成は、FASTAが塩基配列であれば、「C:\\Users\\xxx\\Downloads\\makeblastdb -in input.fasta -dbtype nucl -hash_index -parse_seqids」、FASTAがアミノ酸配列であれば、「/User/xxx/Download/makeblastdb -in input.fasta -dbtype prot -hash_index -parse_seqids」を使えばよい。ファイルのアップロードは次を参照。https://code-kitchen.dev/html/input-file/ BLASTのダウンロードは「https://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/」から。

下記のオプションの内、2つ以上を実装すること。

1.表示するのをファイル一覧ではなく、BLAST DBのファイルのプレフィックス(nr.palとかだと、nrだけ)にして、選択されたDBのファイルたちを全部消す(nrが選ばれると、nr.pal, nr.pdb, nr.pos, nr.pot, nr.ptf, nr.ptoなどをまとめて消す)。

2.makeblastdbのコマンドがエラーになったときは、分かりやすいエラーメッセージを表示する。(例えば、FASTA以外のファイルが入力された時にmakeblastdbがエラー終了するときなど。)

3.URLがhttp://localhost:3000/以外になっても対応できるように、またapacheなどのWEBサーバの下でnodejs-expressを動かすときのために、相対パスでpug, jsを記述する。

4.CSSを使って、見栄えを良くする。

5.BLASTDBファイルを削除するのか、リネームするのか選べるようにする。(リネーム機能には何が必要か考えて実装してみる。)

6.アップロードされるファイルの拡張子の種類を.fasta, .faと.fasta.gz, .fa.gzに限定し、.fasta.gz, .fa.gzの時はnodejsのzlibライブラリを使って解凍しておく。

参考:https://webbibouroku.com/Blog/Article/html5-file-accept

https://www.yoheim.net/blog.php?q=20141002


Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in /home/webpark1634/www/yosh/lib/plugins/authplain/auth.php on line 420

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 65536 bytes) in /home/webpark1634/www/yosh/inc/Exception/FatalException.php on line 0