お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

Advanced IOファンクションの設定

ここでは、ファンクションコンポーネントを設定してタスクマネージャーアプリケーションのコーディングを開始します。

ファンクションのディレクトリfunctions/task_manager_function)には以下が含まれています:

  • index.js メインファンクションファイル
  • catalyst-config.json 設定ファイル
  • Nodeモジュール
  • package.json および package-lock.json 依存関係ファイル

index.jsファイルにコードを追加します。

Advanced I/Oファンクションには以下の機能が含まれています:

リクエストメソッド エンドポイント 目的
POST /addtask 新しいタスクを作成します。
GET /filtertask UserIDTaskName、またはStatusフィールドで作成済みタスクをフィルタリングします。
DELETE /deletetask 不要になったタスクを削除します。
POST /updatetask 既存のタスクの内容を更新します。

必要な依存関係のインストール

Advanced I/OファンクションのコーディングにはExpressAxiosフレームワークを使用します。ファンクションのコードでExpressAxiosパッケージをインポートするには、必要な依存関係をシステムにインストールする必要があります。

パッケージ名 目的
Express HTTPリクエストのルーティングを行います。
Axios HTTPリクエストの送信と処理を行います。

ローカルマシンにインストールするには、ターミナルでファンクションのホームディレクトリ(functions/task_manager_function)に移動し、以下のコマンドを実行します:

copy
$
npm install express axios --save

catalyst_tutorials_nosql_taskmanager_func_cli_pack_install

この情報はpackage.jsonファイルにも反映されます。 catalyst_tutorials_nosql_taskmanager_packagejson

それでは、Advanced I/Oファンクションのコーディングを始めましょう。

以下のコードをコピーして、プロジェクトのfunctions/task_manager_functionディレクトリにあるindex.jsに貼り付け、ファイルを保存してください。アプリケーションのファイルの操作には、お好みのIDEを使用できます。

Note: このセクションのコードを十分に理解するために、必ず一通り確認してください。
index.js
copy
'use strict';
var express=require('express');
var catalyst=require('zcatalyst-sdk-node');
const{NoSQLItem}=require('zcatalyst-sdk-node/lib/no-sql');
const{NoSQLReturnValue,NoSQLConditionGroupOperator}=require('zcatalyst-sdk-node/lib/no-sql/enum');
const{NoSQLMarshall,NoSQLEnum}=require('zcatalyst-sdk-node/lib/no-sql');
const{NoSQLOperator}=NoSQLEnum;
var app=express();
app.use(express.json());
app.use(express.static('public'));
// タスクを追加する
app.post('/addtask',async(req,res)=>{
  let{userID,taskName,dueDate,priority,status}=req.body;
  var capp=catalyst.initialize(req);
  const nosql=capp.nosql();
  const table=nosql.table('YOUR_TABLE_ID');
  try{
    await table.insertItems({
      item:NoSQLItem.from({UserID:userID,DueDate:dueDate,TaskName:taskName,Priority:priority,Status:status}),
      return:NoSQLReturnValue.NULL
    });
    res.send({message:"Thanks! Your task has been successfully inserted."});
  }catch(error){
    res.status(500).send({error:"Internal server error occurred. Please try again in some time."});
  }
});
// タスクをフィルタリングする
app.get('/filtertask',async(req,res)=>{
  const query=req.query;
  const parsedData={index_data:{userID:query.userID,taskName:query.taskName,status:query.status}};
  const userId=parsedData.index_data.userID;
  var capp=catalyst.initialize(req);
  const nosql=capp.nosql();
  const table=nosql.table('YOUR_TABLE_ID');
  try{
    if(userId!=null&&parsedData.index_data.taskName===''){
      if(parsedData.index_data.status==='')return res.status(400).json({error:"Oops! You forgot to select a status."});
      const groupOpInsert=await table.queryTable({
        key_condition:{attribute:'UserID',operator:NoSQLOperator.EQUALS,value:NoSQLMarshall.makeString(parsedData.index_data.userID)},
        consistent_read:true,
        limit:10,
        forward_scan:true
      });
      let responseData=[];
      groupOpInsert.getResponseData().forEach(data=>{
        responseData.push({
          UserID:data.item.get("UserID"),
          TaskName:data.item.get("TaskName"),
          DueDate:data.item.get("DueDate"),
          Priority:data.item.get("Priority"),
          Status:data.item.get("Status")
        });
      });
      const filteredData=await filterByStatus(responseData,parsedData);
      res.status(200).send(filteredData);
    }else if(userId!=null&&parsedData.index_data.taskName!=null){
      if(parsedData.index_data.status==='')return res.status(400).json({error:"Oops! You forgot to select a status."});
      const groupOpInsert=await table.queryTable({
        key_condition:{
          group_operator:NoSQLConditionGroupOperator.AND,
          group:[
            {attribute:'UserID',operator:NoSQLOperator.EQUALS,value:NoSQLMarshall.makeString(parsedData.index_data.userID)},
            {attribute:'TaskName',operator:NoSQLOperator.EQUALS,value:NoSQLMarshall.makeString(parsedData.index_data.taskName)}
          ]
        },
        consistent_read:true,
        limit:10,
        forward_scan:true
      });
      let responseData=[];
      groupOpInsert.getResponseData().forEach(data=>{
        responseData.push({
          UserID:data.item.get("UserID"),
          TaskName:data.item.get("TaskName"),
          DueDate:data.item.get("DueDate"),
          Priority:data.item.get("Priority"),
          Status:data.item.get("Status")
        });
      });
      const filteredData=await filterByStatus(responseData,parsedData);
      res.send(filteredData);
    }else return res.send("Kindly enter partiyion key user ID and sort key Taskname");
  }catch(error){
    res.status(500).send({error:"Internal server error occurred. Please try again in some time."});
  }
});
// タスクを削除する
app.delete('/deletetask',async(req,res)=>{
  const query=req.query;
  const parsedData={index_data:{userID:query.userID,taskName:query.taskName}};
  var capp=catalyst.initialize(req);
  const nosql=capp.nosql();
  const table=nosql.table('YOUR_TABLE_ID');
  try{
    await table.deleteItems({keys:NoSQLItem.from({UserID:parsedData.index_data.userID,TaskName:parsedData.index_data.taskName})});
    res.status(200).json({message:"Data deleted successfully!"});
  }catch(error){
    res.status(500).send({error:"Internal server error occurred. Please try again in some time."});
  }
});
// タスクを更新する
app.post('/updatetask',async(req,res)=>{
  let{UserID,TaskName,DueDate,Priority,Status}=req.body;
  var capp=catalyst.initialize(req);
  const nosql=capp.nosql();
  const table=nosql.table('YOUR_TABLE_ID');
  try{
    await table.insertItems({
      item:NoSQLItem.from({UserID:UserID,DueDate:DueDate,TaskName:TaskName,Priority:Priority,Status:Status}),
      return:NoSQLReturnValue.NULL
    });
    res.send({message:"Items updated successfully!"});
  }catch(error){
    res.status(500).send({error:"Internal server error occurred. Please try again in some time."});
  }
});
async function filterByStatus(data,parseData){
  return data.filter(task=>task.Status.toLowerCase()===parseData.index_data.status.toLowerCase());
}
module.exports=app;
View more
Note: 16行目、34行目、93行目、106行目にテーブルIDを必ず入力してください。

ファンクションディレクトリの設定が完了しました。次に、クライアントディレクトリの設定に進みます。

最終更新日 2026-03-05 11:43:24 +0530 IST