序論と背景


今日はオーディンのNode-js course . 私の会社は、自己トレーニングに非常に熱心で、異なる技術を学び実践するコースのキュレーテッドリストを提案します.私は私がすでにJSに堪能であるので、私はnodejsを選びます、私は構文詳細より良い実行により多くの焦点を与えることができます.
ここで私はそれを通して私の学習を記録します.それを公にするインセンティブは以下の通りです.
  • 敗北の臆病!私は公的にウェブに掲示するのに慣れていません、そして、そうすることはすでに私にとって大きなステップです!

  • Learn by teaching : ちょうど消化されたものを再説明しようとすることは記憶に利益をもたらすかもしれません.
  • 飛び込みましょう🤿 !

    導入

  • 2009年以降NODEJSが存在する.
  • JavaScriptのランタイムです.ブラウザで動作するJavaScriptとは異なり、ローカルマシン上で動作します.バックグラウンドでは、ノードがブラウザでJSとして仮想マシンで動作していると推測します.
  • これは非同期のイベント駆動です:コードの行は必ずしも順序で実行されません.代わりに、ネットワークリクエストやコールバックなどのイベントによって呼び出される関数を記述します
  • イベントドリブン


    私が私が私の傘を忘れたならば、私に話すアプリが欲しいと言いましょう.手順は次のとおりです.
  • 天気予報
  • 晴れならストップ
  • 私がすでに傘を得たならば、私のデータベース「バックパック」をチェックしてください
  • 私がそれを得たならば、止まってください
  • 傘を持ってきてください
  • ここに2つの非同期プロセスがあります.私が一歩一歩実行するならば、プログラムは動きます.しかし、同時にいくつかのアクションを実行することで、より速くすることができます.
  • それは晴れている場合は、予測を取得し、停止
  • 傘がそこにあるならば、データベースをチェックしてください
  • それから、それは晴れでありません、そして、私が傘を持っていないならば、私にそれを取るように思い出させてください
  • このようにして、予測やDBからの最初の応答が得られるとすぐに、プログラムを停止します.両方の動作が実行中(FETCH & query)の場合、ノードはイベントで待機します.ここでフェッチ/クエリーの完了です.このプロセスはaddEventListener フロントエンドではなく、マウスのクリックを待つのではなく、我々のイベントは、主にネットワークのリクエストとDBのクエリされます.
    イベントを扱うにはcallbacks .

    A callback is a function pass to another function as argument.


    多くのfonctionsもコールバックを使用してmap and forEach : [1, 2, 3].forEach(n => console.log(n) . イベントリスナーはコールバックを使用します.element.addEventListener('click', console.log) .
    NODEJSにおけるコールバックの使用法の例を示します.
    http
      .createServer((req, res) => {
        res.writeHead(200, { 'Content-Type': 'text/html' });
        res.end('Hello Node!');
      })
      .listen(8080);
    

    リード&ウォッチ


    NODEJSウェブサイト


    nodejs.org

    ブロッキングでないブロッキング


    サイトのナビゲーション中に遭遇blocking vs non blocking 私の好奇心を引き起こしたページは、名前が終わるメソッドに言及しますSync . それは上記の「イベント駆動」セクションと関係があるかもしれないので、読み続けました.
    ブロック化メソッドは同期的に実行され、非ブロックメソッドは非同期で実行されます.
    const fs = require('fs');
    const data = fs.readFileSync('/file.md'); // 1. blocks the process until the file is read
    console.log(data); // 2. called after data read
    nextMethod(); // 3. called after console.log
    
    fs.readFile('/file.md', (err, data) => {
      // 1. async method, do not block the process !
      if (err) throw err;
      console.log(data); // 3. console when 1. resolved
    });
    nextMethod(); // 2. called without waiting completion of 1.
    
    ブロック化メソッドは同期して実行され、解決するまで実行をブロックします.エラーが発生した場合、エラーを捕捉する必要があります.
    非ブロックメソッドは非同期で実行し、実行をブロックしません.通常、コールバックは、解決の後、他の操作を実行するために通過されることができます.
    nodejsはシングルスレッドであるため、同時処理はイベントループを参照する.複数のリクエストを受信するサーバと、データベース上でタイムリーなI/O操作を実行するリクエストハンドラーを考えてみましょう.ブロックメソッドを使用すると、要求を1つずつ処理します.しかし、I/O操作が進行中の間、非ブロッキング方法を使用することはサーバーに他の要求を処理させます.これは巨大なパフォーマンスの違いにつながるかもしれません.
    同期と非同期メソッドを注意してください!次の例外でエラーが発生します:
    fs.readFile('/file.md', (err, data) => {
      // 1. start reading file.md
      if (err) throw err; // 3. crash ! can't read data as the file has been deleted whild reading it.
      console.log(data);
    });
    fs.unlinkSync('/file.md'); // 2. delete file.md
    
    コールバックの中で非ブロッキングコールを配置すると、より安全な操作順序が保証されます.
    fs.readFile('/file.md', (err, data) => {
      // 1. start reading file.md
      if (err) throw err;
      console.log(data); // 2. log data
      fs.unlink('/file.md', err => {
        // 3. start removing file
        if (err) throw err; // handle error if necessary
      });
    });
    

    MDNサーバーサイド導入


    MDN

    HTTP


    HTTPは、2つのコンピュータ(クライアントとサーバ)の間でハイパーテキストを転送するために使用されるプロトコルです.これは、テキスト(すべてのコマンドは、プレーンテキスト広告を読みやすい)と無条件:クライアントは、サーバーが前の交換の状態を保持していません.クライアントだけがHTTPリクエストを行うことができ、サーバはそれに応答することができます.サーバは少なくともHTTPリクエストに答える必要があります.

    静的vsダイナミック


    Resourceが要求されるときはいつでも、静的サイトは常に同じ内容を届けます.Gatsbyのサイトは静的です:彼らはビルドし、サーバーに格納され、それがそのまま送信されます.
    動的サイトはオンデマンドで生成されます.通常、DBからデータをテンプレートに挿入します.サーバは、要求において送信されるユーザ設定に基づいてコンテンツを適応させるか、あるいはDBに格納することができる.

    利益


    効率的なストレージと配信:Amazonの製品やFacebookのポストのような大量のデータを格納する方法は、個々のWebページよりも効率的にデータベースになります.サーバーは、このデータベースにアクセスし、構築されたWebページ(HTML)またはデータ(JSON)を返すことができます.Amazonの結果と製品のページ.
    ユーザーの利便性をカスタマイズ:サーバーは、クレジットカードの詳細、検索履歴や習慣のようなユーザーの情報を格納することができます.Google自動補完は以前の検索を使用します.
    コントロールのアクセス:表示、編集、削除できます.インフォメーション.これはユーザでも他のサーバでも構いません.EX :銀行ウェブサイトは、あなたのアカウント情報を表示するか、パスワードを編集するためにログオンする必要があります.銀行自体は、あなたの口座残高を編集することができます.
    ストアセッション/状態情報:サーバーはサイトの現在のユーザーを覚えていて、それの応答を適応させることができます.EX : Nページの閲覧後に購読するようお願いします.
    通知&通信:サーバーは、SMS、プッシュ通知を送信することができます.しかし、ライブメッセージングやビデオの会話も.
    データ分析:我々はユーザーのデータを収集し、それらを使用することがあります.Facebookのニュースフィードや広告.

    Webフレームワーク


    フレームワークは、しばしば我々がしばしばアプリケーションのために繰り返す必要がある一般の活動を扱います:
    簡単にリストソース/ページをハンドラ関数にマッピングする
    from django.conf.urls import url
    from . import views
    
    urlpatterns = [
       url(r'^$', views.index),         # example: /best/
       url(r'^junior/$', views.junior), # example: /best/junior/
    ]
    
    HTMLテンプレートのフィルタリングデータをモデルから埋める
    from django.shortcuts import render
    from .models import Team
    
    def junior(request):
        list_teams = Team.objects.filter(team_type__exact="junior")
        context = {'list': list_teams}
        return render(request, 'best/index.html', context)
    
    Express は非常に人気のあるノードフレームワークです.それは高速で、控えめな、柔軟な、WebアプリケーションとHTTPの要求のためのユーティリティを提供しています.これはミニマリストです:いくつかの機能(DBアクセス、ユーザーの制限)ライブラリや他のフレームワークからエクスプレスに基づいて読み込まれる可能性があります.
    Deno シンプルでモダンで安全なJS/TSランタイムとフレームワークビルドv 8と錆です.これはいくつかの問題を修正しようとしてノード:セキュリティ、フォーム、モジュールのバージョンです.

    ノードへのFreeCodeampの導入


    フリーエコデコarticle そして、リンクされたビデオは明らかに説明しますイベントループ:
    スピーカーは、呼び出しスタック、Web API、コールバックキュー、およびレンダリングキューの現在の状態を表示するために作成するツールを使用します.Loupe
    This イベントループと非同期実行に関する詳細な記事です.

    申請の免除


    7 things nodejsでビルドできます.これらはすべて面白いプロジェクトです.

  • Gif chat room :ディー
  • Remote control a car
  • 我々は、ポケモンを演奏します
  • リモートコントロールコンピュータ
  • ハングアウトのようなウェブサイトを構築する
  • 協調描画ツール
  • RSSリーダー
  • 結論


    オーディン概念で始まるオーディンコース.私は自己訓練していて、アカデミックなCSを持っていませんでした.今、私は非常に秩序の基礎を確認して満足している!