--- title: "ファンクションディレクトリの設定" url: https://docs.catalyst.zoho.com/ja/tutorials/todo-list/nodejs/configure-function/ service: All Services type: tutorial related_links: - name: "Advanced I/O Functions" url: /ja/serverless/help/functions/advanced-io/ - name: "Functionsディレクトリ構造" url: /ja/cli/v1/project-directory-structure/functions-directory --- # Advanced I/Oファンクションの設定 次に、ファンクションコンポーネントを設定してTo-Doリストアプリケーションのコーディングを開始します。 ファンクションのディレクトリ(functions/to\_do\_list\_function)には以下が含まれています: * index.js メインファンクションファイル * catalyst-config.json 設定ファイル * Nodeモジュール * package.jsonとpackage-lock.json 依存関係ファイル index.jsファイルにコードを追加します。
サーバーとData Store間のルーティングを処理するAdvanced I/Oファンクションの3つのAPIは以下のとおりです: * GET /todo: Data Storeの_TodoItems_テーブルからTo-Doリストアイテムを取得します * POST /todo: Data Storeに新しいリストアイテムを作成して保存します * DELETE /todo: Data Storeからリストアイテムを削除します
#### Node.js用Expressフレームワークのインストール ルーティング操作を実行するためにExpressフレームワークを使用する必要があります。ファンクションのコードにExpressパッケージをインポートするには、システムにExpressの依存関係をインストールする必要があります。 ローカルマシンにExpress.jsをインストールするには、ターミナルでファンクションのホームディレクトリ(functions/to\_do\_list\_function)に移動し、以下のコマンドを実行します: npm install express --save
これによりExpressモジュールがインストールされ、依存関係が保存されます。
この情報はpackage.jsonファイルにも更新されます。
次に、ファンクションファイルにコードを追加しましょう。Node.jsコードをコピーし、プロジェクトのfunctions/to\_do\_list\_functionディレクトリにあるindex.jsに貼り付けて、ファイルを保存してください。アプリケーションのファイルの作業には、任意のIDEを使用できます。 Note: このセクションに記載されたコードを十分に理解するようにしてください。次のセクションでファンクションとクライアントのアーキテクチャについて説明します。
const express = require('express'); const catalystSDK = require('zcatalyst-sdk-node'); const app = express(); app.use(express.json()); app.use((req, res, next) => { const catalyst = catalystSDK.initialize(req); res.locals.catalyst = catalyst; next(); }); //GET API。サーバーから既存のタスクがあれば取得します。 app.get('/all', async (req, res) => { try { const { catalyst } = res.locals; const page = parseInt(req.query.page); const perPage = parseInt(req.query.perPage); const zcql = catalyst.zcql(); const hasMore = await zcql .executeZCQLQuery(`SELECT COUNT(ROWID) FROM TodoItems`) .then((rows) => parseInt(rows[0].TodoItems.ROWID) > page * perPage); const todoItems = await zcql .executeZCQLQuery( `SELECT ROWID,Notes FROM TodoItems LIMIT ${ (page - 1) * perPage + 1 },${perPage}` ) .then((rows) => rows.map((row) => ({ id: row.TodoItems.ROWID, notes: row.TodoItems.Notes })) ); res.status(200).send({ status: 'success', data: { todoItems, hasMore } }); } catch (err) { console.log(err); res.status(500).send({ status: 'failure', message: "We're unable to process the request." }); } }); // POST API。タスクを作成するロジックを含みます app.post('/add', async (req, res) => { try { const { notes } = req.body; const { catalyst } = res.locals; const table = catalyst.datastore().table('TodoItems'); const { ROWID: id } = await table.insertRow({ Notes:notes }); res.status(200).send({ status: 'success', data: { todoItem: { id, notes } } }); } catch (err) { console.log(err); res.status(500).send({ status: 'failure', message: "We're unable to process the request." }); } }); // DELETE API。タスクを削除するロジックを含みます。 app.delete('/:ROWID', async (req, res) => { try { const { ROWID } = req.params; const { catalyst } = res.locals; const table = catalyst.datastore().table('TodoItems'); await table.deleteRow(ROWID); res.status(200).send({ status: 'success', data: { todoItem: { id: ROWID } } }); } catch (err) { console.log(err); res.status(500).send({ status: 'failure', message: "We're unable to process the request." }); } }); module.exports = app; ファンクションディレクトリの設定が完了しました。