--- title: "Configurar la función Advanced IO" url: https://docs.catalyst.zoho.com/es/tutorials/task-manager/nodejs/config-function/ description: "Construya una aplicación React de gestión de tareas para crear y administrar tareas. Puede realizar operaciones CRUD y funcionalidad de filtrado sobre las tareas." last_updated: 2026-08-17T12:16:04Z service: All Services type: tutorial related_links: - name: "Documentación de ayuda de Catalyst NoSQL" url: /es/cloud-scale/help/nosql/introduction/ - name: "SDK de NodeJS para NoSQL" url: /es/sdk/nodejs/v2/cloud-scale/nosql/get-component-instance/ - name: "Advanced IO Function" url: /es/serverless/help/functions/advanced-io/ - name: "Estructura de directorio de Functions" url: /es/cli/v1/project-directory-structure/functions-directory --- # 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](https://docs.catalyst.zoho.com/es/cli/v1/project-directory-structure/functions-directory), `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`](https://docs.npmjs.com/files/package.json) y [`package-lock.json`](https://docs.npmjs.com/configuring-npm/package-lock-json.html) 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](https://expressjs.com/) y [Axios](https://www.npmjs.com/package/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: ```sh npm install express axios --save ``` ![catalyst_tutorials_nosql_taskmanager_func_cli_pack_install](https://catalyst-docs-development.zohostratus.in/images/tutorials/task-manager/catalyst_tutorials_nosql_taskmanager_func_cli_pack_install.webp) Esta información también se actualizará en el archivo `package.json`. ![catalyst_tutorials_nosql_taskmanager_packagejson](https://catalyst-docs-development.zohostratus.in/images/tutorials/task-manager/catalyst_tutorials_nosql_taskmanager_packagejson.webp) 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. > **Nota:** Revise el código de esta sección para asegurarse de que lo comprende completamente. **index.js** ```javascript '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; ``` > **Nota:** Asegúrese de proporcionar el ID de su tabla en las líneas **16**, **34**, **93** y **106**. El directorio de la función está ahora configurado. Podemos proceder a configurar el directorio del cliente.