Configurar la función Advanced IO
Ahora comenzaremos a codificar la aplicación de gestión de tareas configurando el componente de función.
El directorio de la función, functions/task_manager_function contiene:
- El archivo principal de la función index.js
- El archivo de configuración catalyst-config.json
- Módulos de Node
- Los archivos de dependencias package.json y package-lock.json
Agregará código en el archivo index.js.
La función Advanced I/O contiene las siguientes funcionalidades:
| Método de solicitud | Endpoint | Propósito |
|---|---|---|
| POST | /addtask | Para crear una nueva tarea. |
| GET | /filtertask | Para filtrar las tareas creadas por los campos UserID, TaskName o Status. |
| DELETE | /deletetask | Para eliminar tareas que ya no son necesarias. |
| POST | /updatetask | Para actualizar el contenido de una tarea existente. |
Instalar dependencias requeridas
Utilizaremos los frameworks Express y Axios para codificar la función Advanced I/O. Para importar los paquetes Express y Axios en el código de su función, debe instalar las dependencias requeridas en su sistema.
| Nombre del paquete | Propósito |
|---|---|
| Express | Para enrutar solicitudes HTTP. |
| Axios | Para enviar y gestionar solicitudes HTTP. |
Para instalarlos en su máquina local, navegue al directorio principal de la función (functions/task_manager_function) en su terminal y ejecute el siguiente comando:
Esta información también se actualizará en el archivo package.json.

Ahora, comencemos a codificar la función Advanced I/O.
Copie el código proporcionado a continuación y péguelo en el archivo index.js en el directorio functions/task_manager_function de su proyecto, y guarde el archivo. Puede usar cualquier IDE de su preferencia para trabajar con los archivos de la aplicación.
'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'));
// Agregar una tarea
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."});
}
});
// Filtrar tarea
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."});
}
});
// Eliminar tarea
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."});
}
});
// Actualizar tarea
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;
El directorio de la función está ahora configurado. Podemos proceder a configurar el directorio del cliente.
Última actualización 2026-03-20 21:51:56 +0530 IST
