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)に移動し、以下のコマンドを実行します:
copy
$
npm install express --save
これによりExpressモジュールがインストールされ、依存関係が保存されます。
この情報はpackage.jsonファイルにも更新されます。
次に、ファンクションファイルにコードを追加しましょう。Node.jsコードをコピーし、プロジェクトのfunctions/to_do_list_functionディレクトリにあるindex.jsに貼り付けて、ファイルを保存してください。アプリケーションのファイルの作業には、任意のIDEを使用できます。
Note: このセクションに記載されたコードを十分に理解するようにしてください。次のセクションでファンクションとクライアントのアーキテクチャについて説明します。
index.js
copy
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;
ファンクションディレクトリの設定が完了しました。
最終更新日 2026-03-05 11:43:24 +0530 IST

