Express: Node.jsでWebサーバを起動


前提


ドキュメント


Express概要


インストール

npm install express

Express起動の流れ

  1. const app = express()
    • トップレベルの関数express()appオブジェクトを得る
  2. app.メソッド()
    • HTTPリクエストに応じたレスポンスを記述
  3. app.listen()
    • サーバ起動

例: app.js

const express = require('express')
const app = express() // たいていappという名前

// レスポンスを記述していく
app.get('/', (req, res) => {
  res.send('Hello Express!')
})
// ...

// ポート3000でサーバ起動
app.listen(3000, () => console.log('サーバ起動'))

以降ではexpress()listen()の部分は省略。


Expressの担当はURLのパス

https://ドメイン/パス

URLのドメインまでの処理は、Express以前の、Nginxなど(リバースプロキシ、ロードバランサ)がする前提。


ルーティングの基本

app.メソッド(パス, コールバック)

// GETメソッド パス/
app.get('/', (req, res) => {
  // それに対して、レスポンスを記述
})

// POSTメソッド パス/books
app.post('/books', (req, res) => {
  // それに対して、レスポンスを記述
})

パスの種類


コールバックの形

function コールバック(req, res){
  console.log(req.body) // リクエスト内容
  res.send('Hello Express!') // レスポンス処理
}

レスポンスのメソッド

app.get('/', (req, res) => {
  res.send({name:'アリス'}) // {"name":"アリス"}
})

同じメソッド・パスに複数のコールバック

// 同じメソッド・パスに5つのコールバック
app.get('/same-path', コールバック1, コールバック2)
app.get('/same-path', cb3, [cb4, cb5]) // 配列も可

メソッドとパスがマッチすると、

app.get('/', (req, res, next) => {
  next() // 次へ
}, (req, res, next) => {
  console.log(req.method) // ここは実行
})

app.get('/', (req, res) => {
  res.send('hello') // 実行なし
})

上記はサーバはエラーにならないが、レスポンスがないので、クライアントは長く待たされた上にエラー。