🦷

認証付き Websocket にアクセスする node.js コードのサンプル

2022/12/29に公開

あらかじめ発行された Bearer Token を HTTP ヘッダーに引き渡さないとアクセスできない Websocket URL にアクセスする node.js プログラムのサンプルです。

const StreamingURL = 'https://example.com/streaming/'
const StreamingHeaders = ['Authorization: Bearer ' + AccessToken, 'User-Agent: example']

const websocket = new WebSocketClient()

websocket.on('connectFailed', (error) => {
  console.log('Connect failed : %s', error)
  /// 接続に失敗したら 3 秒待って再度リトライしてみる
  sleep(3).then(() => { this.start() })
})

websocket.on('connect', (connection) => {
  const StreamName = 'public'
  const SubscribeMessage = { type: 'subscribe', stream: StreamName }

  connection.sendUTF(JSON.stringify(SubscribeMessage))
  console.log('Subscribe started : %s, %s', this.StreamingURL, JSON.stringify(SubscribeMessage))

  connection.on('error', (error) => {
    console.log('Connection Error : %s', error)
    sleep(3).then(() => { this.start() })
  })
  connection.on('close', () => {
    console.log('Connection Closed.')
    sleep(3).then(() => { this.start() })
  })

  connection.on('message', async (message) => {
    if (message.type === 'utf8') {
      const msg = JSON.parse(message.utf8Data)

      switch (msg.event) {
        case 'update':
          /// update 処理を実行する
          break
        case 'delete':
          /// delete 処理を実行する
          break
      }
    }
  })
})

/// connect の 第4引数に Bearer Token を含んだ HTTP ヘッダを渡すことで Websocket の認証を通過させる
websocket.connect(StreamingURL, null, null, StreamingHeaders)

Discussion