[Express]ルーティング、ミドルウェア


設定


Node.jsをインストールする場合は、作業中のディレクトリにExpressをインストールします.npm install express依存オブジェクトをリストに保存するにはnpm install express --save

デフォルトのルーティング

app.METHOD(PATH, HANDLER)
  • app:expressインスタンス
  • METHOD:HTTPリクエストメソッド
  • PATH:サーバから
  • へのパス
  • HANDLER:ルーティングマッチング時に実行される関数
  • 静的ファイルの提供

    app.use(express.static('public'))「public」ディレクトリに含まれるファイル(jpg、js、css、htmlなど)をロードできます.
    他のディレクトリなどを複数回呼び出すことができます.
    ディレクトリは相対的であり、他のディレクトリで実行される場合は、絶対パスを使用するとより安全です.

    ルート


    メソッドとURL(/lower、/upperなど)を使用してブランチポイントを作成することをルート(Routing)と呼びます.
    Express基本ルーティングの例
    const express = require('express'); // Express 모듈 사용
    const app = express(); // 서버 작성
    const ip = 'localhost'; 
    const port = 3000;
    
    // 클라이언트의 get요청의 응답
    app.get('/', function(req, res) {
      res.send('hello world');
    });
    // 클라이언트의 post요청의 응답
    app.post('/', function (req, res) {
      res.send('POST request to the homepage');
    });
    
    // 들어야할 ip와 포트넘버를 콘솔에 출력
    app.listen(port, (err) => {
      // 에러 출력
      if(err) return console.log(err);
      // ip와 포트넘버 출력
      console.log(`server listening on ${ip}:${port}`);
    })

    ミドルウェア



    リクエストに必要な機能を追加するか、問題を発見した不良品を除外します.
    前述したように、ミドルウェアはプロセスの中間に参加し、特定のロールを実行します.

    ミドルウェアの構成



    上のミドルウェアの内部では何もしていません.next()関数を呼び出して次のミドルウェアにデータを転送するだけです.

    常用ミドルウェア


    logger


    すべてのリクエストをチェックするurlまたはメソッド.
    // 생략
    let logger = (req, res, next) => {
      console.log(`http request method is ${req.method}, url is ${req.url}`);
      next();
    };
    app.use(myLogger);
    // 생략
    特定のenpointではなく、すべてのリクエストに同じミドルウェアを適用する場合は、useメソッドを使用します.

    body-parser


    構造化POST要求等に含まれる負荷.
    body-parserで処理できるボディフォーマットはjson、デフォルトテキスト(テキスト)、bufferです.
    const jsonParser = express.json()
    // 생략
    app.post('/api/users', jsonParser, function (req, res) {
      // req.body에는 JSON의 형태로 payload가 담겨져 있다.
    })

    cors


    すべての要求/応答にCORSヘッダを付けるために使用されます.
  • すべての要求はCORS
  • を許可する
    const cors = require('cors')
    // 생략
    app.use(cors())
  • 特定要求CORS
  • を許可する
    const cors = require('cors')
    // 생략
    app.get('/products/:id', cors(), function (req, res, next) {
      res.json({msg: 'This is CORS-enabled for a Single Route'})
    })

    Token検証に合格するかどうか


    認証要求ヘッダーにユーザー認証情報が含まれているかどうかを確認します.
    HTTPリクエストにタグがあるかどうかを判断し、ログインしたユーザーが成功またはログインしていないときにエラーを送信するミドルウェアの例.
    app.use((req, res, next) => {
      if(req.headers.token){
        req.isLoggedIn = true;
        next()
      } else {
        res.status(400).send('invalid user')
      }
    })