--- title: "Configurar el directorio de funciones" url: https://docs.catalyst.zoho.com/es/tutorials/todo-list/nodejs/configure-function/ service: All Services type: tutorial related_links: - name: "Advanced I/O Functions" 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 I/O A continuación, comenzaremos a codificar la aplicación de lista de tareas configurando el componente de función. El directorio de la función, functions/to\_do\_list\_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.
Las tres APIs en la función Advanced I/O que gestionan el enrutamiento entre el servidor y el Data Store son: * GET /todo: Para obtener los elementos de la lista de tareas de la tabla _TodoItems_ en el Data Store * POST /todo: Para crear y guardar un nuevo elemento en el Data Store * DELETE /todo: Para eliminar un elemento de la lista del Data Store
#### Instalar el framework Express para Node.js Necesitaremos usar el framework Express para realizar operaciones de enrutamiento. Para importar el paquete Express en el código de su función, debe instalar la dependencia de Express en su sistema. Para instalar Express.js en su máquina local, navegue al directorio principal de la función (functions/to\_do\_list\_function) en su terminal y ejecute el siguiente comando: npm install express --save
Esto instalará el módulo Express y guardará las dependencias.
Esta información también se actualizará en el archivo package.json.
A continuación, agreguemos el código en el archivo de la función. Copie el código de Node.js y péguelo en index.js en el directorio functions/to\_do\_list\_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 proporcionado en esta sección para asegurarse de que lo comprende completamente. Discutiremos la arquitectura de la función y el cliente en la siguiente sección.
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(); }); //API GET. Obtener tareas existentes, si las hay, del servidor. 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." }); } }); // API POST. Contiene la lógica para crear una tarea 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." }); } }); // API DELETE. Contiene la lógica para eliminar una tarea. 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; El directorio de funciones está ahora configurado.