[CS] Node.js Express Day-31


Express.jsはノードです.js環境でWebサーバ、またはAPIサーバを作成するための人気フレームワーク.
Expressフレームワークはnpmでダウンロードでき、HTTPモジュールで作成されたフレームワークとは異なり、独自のルータやミドルウェアの追加に便利です.

ルーティング:メソッドとURLによるブランチ(Routing)


メソッドとURL(/lower、/upperなど)を使用してブレークポイントを作成することをルート(Routing)と呼びます.
ex)純ノード.例
const requestHandler = (req, res) => {
  if(req.url === '/lower') {
    if (req.method === 'GET') {
      res.end(data)
    } else if (req.method === 'POST') {
      req.on('data', (req, res) => {
        // do something ...
      })
    }
  }
}
ex)Expressルータの例
const router = express.Router()

router.get('/lower', (req, res) =>{
  res.send(data)
})

router.post('/lower', (req, res) =>{
  // do something
})

Middleware


ミドルウェアは、リクエストに必要な機能を追加したり、問題を発見した部分を消去したりすることができます.ミッドレンジソフトウェアはExpressの最大の利点の一つです.

常用ミドルウェア

  • すべてのリクエストのurlまたはメソッドをチェックする場合、
  • のPOST要求等を含む本体(負荷)を構築する場合、
  • .
  • すべての要求/応答にCORSヘッダを付ける必要がある場合、
  • 要求ヘッダにユーザ認証情報が含む場合、
  • .

    構造化POST要求等を含む負荷の場合


    ex)純ノード.例
    let body = [];
    request.on('data', (chunk) => {
      body.push(chunk);
    }).on('end', () => {
      body = Buffer.concat(body).toString();
      // body 변수에는 문자열 형태로 payload가 담겨져 있습니다.
    });
    ex)bodyParserを使用して要求されたデータをjson形式に変換する
    const jsonParser = express.json()
    
    // 생략
    app.post('/api/users', jsonParser, function (req, res) {
      // req.body에는 JSON의 형태로 payload가 담겨져 있습니다.
    })

    Expressでは、CORS処理をかなり容易に行うことができる。


    ex)純ノード.jsでは,ヘッダを毎回再定義し,OPTIONSメソッドのルーティングも実現しなければならない.
    const defaultCorsHeader = {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
      'Access-Control-Allow-Headers': 'Content-Type, Accept',
      'Access-Control-Max-Age': 10
    };
    
    // 생략
    if (req.method === 'OPTIONS') {
      res.writeHead(201, defaultCorsHeader);
      res.end()
    }
    でもエクスプレスですjsを用いてもよいし、corsミドルウェアを用いて簡単な処理を行ってもよい.
    ex)corsモジュールによる処理の簡素化
    const cors = require('cors')
    
    // 생략
    app.use(cors()) // 모든 요청에 대해 CORS 허용

    ミドルウェアの動作原理を理解する


    基本的な文法を理解してみましょう.
    var express = require('express');
    var app = express();
    
    app.get('/', function(req, res, next){
    	next();
    })
    
    app.listen(3000);
    req、resは(request、response)、nextは次のミドルウェアを実行します.上記の例では、ミドルウェア内部では何も実行されず、next()を介して次のミドルウェアにデータが転送される.