2020.3.6

axiosからCloud Functionsにパラメータ付きのリクエストを送って関数を実行する方法

FirebaseのCloud Functionsで作成した関数を、Vue.jsで作成したWebアプリからaxiosを使ってパラメータ付きのリクエストで呼び出す方法です。

目次

  • Functionsの作成
  • axiosのリクエスト(POST)
  • 参考リンク

Functionsの作成

呼び出される側のCloud Functionsの関数は以下の通りとします。


const functions = require('firebase-functions');

exports.sendMail = functions
  .https.onRequest((req, res) => {

    res.set('Access-Control-Allow-Origin', '*');

    if (req.method === 'OPTIONS') {
        // Send response to OPTIONS requests
        res.set('Access-Control-Allow-Methods', 'GET');
        res.set('Access-Control-Allow-Headers', 'Content-Type');
        res.set('Access-Control-Max-Age', '3600');
        res.status(204).send('');
    } else {
        console.log('param1', req.query.param1)
        console.log('param2', req.query.param2)
        console.log('param3', req.query.param3)

        console.log('name', req.body.name)
        console.log('subject', req.body.subject)
        console.log('message', req.body.message)

        res.send('success');
    }
})

Access-Control-Allow-Origin や リクエストの種類が OPTIONS だった場合の処理はCORSの設定で、異なるドメインから呼び出される際に必要な対応になります。

CORSの対応をしていない場合、以下のようなエラーが発生します。

Access to XMLHttpRequest at 'https://xxx-yyy.cloudfunctions.net/zzz' from origin 'http://localhost:8080' has been blocked by CORS policy: Request header field content-type is not allowed by Access-Control-Allow-Headers in preflight response.

axiosのリクエスト(POST)

axiosで呼び出すリクエストは以下の通りとします。


axios.post('https://xxx-yyy.cloudfunctions.net/zzz?param1=AAA&param2=BBB&param3=CCC', {
  name: 'あああ',
  subject: 'いいい',
  message: 'ううう'
})
.then(response => {
  console.log(response.data)
  console.log(response.status)
}).catch(error => {
  console.error(error)
})

param1、param2、param3がクエリストリング、name、subject、messageがJSON形式で送信するパラメータになります。

リクエスト先のURLはCloud Functionsに作成した関数のURLに置き換えてください。

上記のリクエストを実行して、Firebaseのログを確認すると以下のように出力されます。

参考リンク

Firebase】関連記事