2020年04月18日

Firebase☓ReactでTODOリスト作成(Express)

Firebase☓ReactでTODOリスト作成(Update)の続き

Deleteメソッドの実装でハマったので音を上げてExpress化

functions/package.jsonのenginesを10に変更して

  "engines": {
"node": "10"
},


node10をインストールしてfunctions内でExpressをインストール

cd functions/
ndenv install 10.20.1
ndenv local 10.20.1
yarn add express


エンジンの変更に合わせてルーティングも調整

一覧取得 GET https://.../api/todos
新規追加 POST https://.../api/todo
編集 PUT https://.../api/todo/:id

functions/index.jsは以下のようになります

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const express = require("express");
const cors = require('cors');

admin.initializeApp({
credential: admin.credential.applicationDefault()
});

const db = admin.firestore();

const app = express();
app.use(cors({ origin: true }));

app.get('/todos', async (req, res) => {
const todosSnapshot = await db.collection('todos').orderBy("createdAt", "desc").get();
const todos = [];
todosSnapshot.forEach(doc => {
todos.push({
...doc.data(),
id: doc.id,
});
});
res.send(JSON.stringify(todos));
});
app.post('/todo', async (req, res) => {
const todo = {
'title': req.body.title,
'comment': req.body.comment,
'checked': false,
'createdAt': new Date()
};
const newTodo = db.collection("todos").doc()
await newTodo.set(todo)
res.send("ok1");
})
app.put('/todo/:id', async (req, res) => {
const todo = {
'title': req.body.title,
'comment': req.body.comment,
'checked': false,
};
const newTodo = db.collection("todos").doc(req.params.id)
await newTodo.update(todo)
res.send("ok2");
})

const api = functions.https.onRequest(app);
module.exports = { api };
posted by ねこまんま at 16:59 | Firebase | 更新情報をチェックする