📚

「Node.js超入門[第3版]」学習メモ

2021/10/03に公開

各種リンク

学習メモ

1章 Node.jsの基本

1-1

  • Node.js: JavaScript言語のランタイム環境(プログラムを実行するための環境)
  • バージョン
    • 偶数: LTS(Long Term Support)、つまり長期サポートが保証されている。
    • 奇数: 短い保証期間。新しい技術に積極的に取り組む。
  • 「node + Enter」: nodeで実行する文章を受け付ける。「.exit」で終了。

1-2

2章 ソースコードの基本

2-1

  • http://localhost:3000
    • 3000: ポート番号。どのサービスにアクセスするか指定する
    • 普通のwebサービスは80番。番号がない場合に80にアクセスする。
  • httpオブジェクトはNode.jsで用意されているオブジェクト
  • require
    • Node.js独特のモジュールローディングシステムという機能を利用するもの
      • Node.jsではオブジェクトをモジュール化して管理し、必要な時にロードする。
  • webブラウザは受け取ったテキストがどんな種類かわからないと正しく扱えない
    • ヘッダー情報が大切
      • htmlの<head>内に記述する
      • http.ServerResponseのメソッドを使う
        • response.setHeader(名前, 値)

2-2

  • fs: ファイルを扱う「File System」オブジェクト
    • require('fs')

2-3

  • EJS: Embedded JavaScript Templates
  • npm: パッケージマネージャ。Node.jsに標準で付いている

2-4

  • ルーティング
    • 何もしないとhttp://localhost:300/以下に何をつけても必ずindex.ejsが表示される
    • どのアドレスにアクセスしたらどのコンテンツを表示するか
    • URLオブジェクトを利用する
      • url.parse(request.url)

3章 Webアプリケーションの基本をマスターしよう!

3-1

  • url.parse(request.url, true)
    • 第二引数にtrueを指定することでクエリもパース処理される
  • querystring
    • クエリーテキストを処理するための機能を提供
    • urlとは違い、う普通のテキストをパース処理するのに使う

3-2

  • パーシャル
    • テンプレートの一部を部品化
    • <%- include(ファイル名,  {受け渡す値)%>
      • <%= %>はhtmlタグが含まれてるとエスケープするが<%- %>はエスケープしない
    • クッキーの保存
      • クッキーはヘッダー情報として送受信する。保存するときはresponse。
      • escape(): クッキーに保存できる形式に変換する
    • クッキーの読み取り
      • 読み取りはrequest。
      • unescape(): クッキーの情報を扱えるように変換する

3-3

  • ローカルストレージ
    • クライアント側でしか動かない -> Node.jsのプログラムの中からは使えない
  • JSON(JavaScript Object Notation)
    • JavaScriptのオブジェクトをテキストの形で記述するためのフォーマット
  • 配列の操作
    • unshift: 配列の最初に挿入
    • join: 配列を1つのテキストに変換する

4章 フレームワーク「Express」を使おう!

4-1

  • Expressの特徴: 小さくてパワフル。素のNode.jsに近いが劇的に使いやすくなる。
  • Express  Generator
    • Expressのwebアプリケーションの開発を支援するツール
      • 基本部分の自動生成
      • 様々なパッケージを内包
      • スクリプトがモジュール方式になっている
    • Express  Generatorを使用しないプロジェクトの作成
      • npm init -> npm install express -> index.jsの作成
  • npm install -g hoge
    • -g: Node.js環境全体で使えるようにインストール
  • express --view=ejs {アプリ名}
    • --view=ejs: テンプレートエンジンをejsに設定する。指定しないとJadeというテンプレートエンジンに指定される。
  • package.json: npmで使用するパッケージ情報(dependencies)を記載

4-2

  • Express  Generatorで生成したプロジェクト内の各ファイルの役割
    • www: 「プログラムを実行する」ためのもの。サーバーが起動した後のことは何もしていない。編集も特にしない。
    • app.js: アプリケーション本体の設定に関するもの。実行するアプリケーションの基本的な設定を行う。
    • routes/: 実際に特定のアドレスにアクセスしたときの処理

4-3

  • フォーム送信
    • Body Parser
  • セッション: クライアントごとに値を保存するための仕組み
    • クッキーの機能とサーバー側のプログラムを組み合わせたもの
    • ExpressではExpress Sessionというパッケージが利用できる(これは追加でインストールが必要)
    • req.session.message: messageというプロパティに保存
  • RSS: XMLを使ってデータを配信するフォーマット
    • RSSデータを利用するには以下2つの機能が必要
      • サイトにアクセスしデータを取り出すネットワークアクセス機能
      • XMLデータをパースそてJSのオブジェクトにする機能(xml2jsというパッケージを利用する)

5章 データベースを使おう!

5-1

  • SQL: データアクセス言語
    • 非SQL言語は複雑な検索には向いていないが圧倒的なスピードを持っている
    • Node.jsにはSQLite3データベースファイルにアクセスするパッケージが用意されている
  • DB Browser for SQLite
  • Databaseオブジェクトのシリアライズ(直列化)
    • 用意された処理を順番に実行する
    • 1つのデータを読み込むだけなら不要だが、複数回データを読み込むなら必須。(必ずシリアライズすると覚えておいて問題ない)

5-2

  • CRUD: データベースの基本的な機能
    • Create: 新しいレコードを作成保存する
    • Read: レコードをデータベースから取り出す
    • Update: レコードの内容を書き換える
    • Delete: レコードを削除する
  • db.run
    • データベース側からレコードを取り出す必要のない処理を実行する場合に使う
    • db.run('?, ?, ?', nm, ml, ag)
      • ?: プレースホルダ(値の場所を予約しておく)
  • insert文: レコードの追加

5-3

  • Express Validator: バリデーションチェックのためのパッケージ
    • npm install express-validator
    • router.post('/add', [--設定--], (req, res, next) => {...)
      • notEmpty(): 空かどうか
      • isEmail(): メールアドレスかどうか
      • inInt(): 整数値かどうか
      • その他サニタイズ用のメソッド
        • <validationChain>escape(): htmlタグがエスケープされる
      • customメソッドを使って独自に定義もできる

6章 SequelizeでORMをマスターしよう!

6-1

  • Sequelize
    • ORM(Object Relational Package)プログラム
      • プログラミング言語のオブジェクトとデータベース構造をマッピングし相互にやり取りできる
    • npm install sequelize
    • npm install sequelize-cli
    • npx sequelize init
      • configフォルダ: 設定情報の管理
      • migrationsフォルダ: データベースの変更情報などを管理
        • データベースの内容を変更したりした際にその差分をデータベースに適応したり元に戻したりする仕組み
      • modelsフォルダ: モデルというオブジェクトを定義
      • seedersフォルダ: シーダーという初期データを扱う

6-2

6-3

  • syncによる処理
    • レコードの追加はデータベースの内容を書き換えるので、外部から同時に複数アクセスが行われると一貫性が失われたりする要因になるため、データベースの変更は一括で実行する
  • findByPk
    • 引数に指定したIDのモデルを取得するメソッド

6-4

  • Sequelizeでのバリデーション
    • modelsにバリエーションの設定を記載する
    • catch分でエラーの際の処理を記載する

7章 アプリケーション作りに挑戦!

7-1

  • modelの関連付け
    • アソシエーションという機能で設定する
      • 今回はuserIdの値を使う
    • 1:1(hasOne), 1:多(hasMany),  多:1,(belongsTo) 多:多(blongsToMany)の4パターンのアソシエーション方式がある
      • has..が主モデル、belongs..が従モデル

7-2

  • markdownのデータ管理
    • type.STRINGとtype.TEXT
      • STRINGは最大255文字までの比較的短いテキスト
      • TEXTは長さの制限がない

Discussion