--- title: "Configurar la Advanced I/O Function" url: https://docs.catalyst.zoho.com/es/tutorials/alien-city/nodejs/configure-advio-function/ description: "Crea una aplicación web de una sola página con Catalyst Advanced I/O Function y Data Store para reportar o buscar encuentros con alienígenas en una ciudad." last_updated: 2026-11-04T10:10:44Z service: All Services type: tutorial related_links: - name: "Functions" url: /es/serverless/help/functions/introduction/ - name: "Advanced I/O Functions" url: /es/serverless/help/functions/advanced-io/ - name: "Functions Directory Structure" url: /es/cli/v1/project-directory-structure/functions-directory/ --- # Configurar la Advanced I/O Function Comencemos a codificar la aplicación Alien City configurando el componente de la función. El directorio de la función Node.js ( `[ functions/alien_city_function ](https://docs.catalyst.zoho.com/es/cli/v1/project-directory-structure/functions-directory/)` ) contiene los siguientes archivos: * El archivo principal de la función `index.js` * El archivo de configuración `catalyst-config.json` * Los 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ás código en el archivo principal de la función `index.js`. Las dos APIs en la Advanced I/O Function que manejan el enrutamiento entre el servidor y Data Store son: * **`GET /alien`**: Para verificar si hay alienígenas presentes en una ciudad * **`POST /alien`**: Para reportar la presencia de alienígenas en una ciudad #### Instalar el framework Express de Node.js Para la función Node.js, utilizarás el [framework Express de Node.js](https://expressjs.com/). Para importar el paquete Express en el código, debes instalar las dependencias de Express en tu sistema. Para instalar `Express.js` en tu máquina local, navega al directorio de la función Node (`functions/alien_city_function`) en tu terminal y ejecuta el siguiente comando: ```sh npm install express --save ``` Esto instalará el módulo Express y guardará las dependencias. ![alien-city-client](https://catalyst-docs-development.zohostratus.in/images/tutorials/alcity/catalyst_alcity_install_express.webp) Esta información también se actualizará en el archivo package.json. ![alien-city-client](https://catalyst-docs-development.zohostratus.in/images/tutorials/alcity/catalyst_alcity_package_json.webp) Ahora agreguemos el código en el archivo de la función. Copia el código que se muestra a continuación y pégalo en `index.js` en el directorio `functions/alien_city_function` de tu proyecto, y guarda el archivo. Puedes usar cualquier IDE de tu preferencia para trabajar con los archivos de la aplicación. > **Nota:** Revisa el código de esta sección para asegurarte de comprenderlo completamente. **index.js** ```javascript 'use strict'; var express = require('express'); var app = express(); var catalyst = require('zcatalyst-sdk-node'); app.use(express.json()); const tableName = 'AlienCity'; // La tabla creada en Data Store const columnName = 'CityName'; // La columna creada en la tabla // La API POST que reporta el encuentro con alienígenas en una ciudad específica app.post('/alien', (req, res) => { var cityJson = req.body; console.log(cityJson); // Inicializando el SDK de Catalyst var catalystApp = catalyst.initialize(req); // Consulta la tabla de Catalyst Data Store y verifica si existe una fila para la ciudad dada getDataFromCatalystDataStore(catalystApp, cityJson.city_name).then(cityDetails => { if (cityDetails.length == 0) { // Si la fila no existe, se inserta una nueva fila console.log("Alien alert!"); // Se escribe en los logs. Puedes ver este log desde Logs en la sección Monitor de la consola var rowData = {} rowData[columnName] = cityJson.city_name; var rowArr = []; rowArr.push(rowData); // Inserta el nombre de la ciudad como una fila en la tabla de Catalyst Data Store catalystApp.datastore().table(tableName).insertRows(rowArr).then(cityInsertResp => { res.send({ "message": "Thanks for reporting!" }); }).catch(err => { console.log(err); sendErrorResponse(res); }) } else { // Si la fila ya existe, se envía un mensaje indicando duplicación res.send({ "message": "Looks like you are not the first person to encounter aliens in this city! Someone has already reported an alien encounter here!" }); } }).catch(err => { console.log(err); sendErrorResponse(res); }) }); // La API GET que verifica la tabla en busca de un encuentro con alienígenas en esa ciudad app.get('/alien', (req, res) => { var city = req.query.city_name; // Inicializando el SDK de Catalyst var catalystApp = catalyst.initialize(req); // Consulta la tabla de Catalyst Data Store y verifica si existe una fila para la ciudad dada getDataFromCatalystDataStore(catalystApp, city).then(cityDetails => { if (cityDetails.length == 0) { res.send({ "message": "Hurray! No alien encounters in this city yet!", "signal": "negative" }); } else { res.send({ "message": "Uh oh! Looks like there are aliens in this city!", "signal": "positive" }); } }).catch(err => { console.log(err); sendErrorResponse(res); }) }); /** * Verifica si ya se reportó un encuentro con alienígenas en la ciudad dada consultando la tabla de Data Store * @param {*} catalystApp * @param {*} cityName */ function getDataFromCatalystDataStore(catalystApp, cityName) { return new Promise((resolve, reject) => { // Consulta la tabla de Catalyst Data Store catalystApp.zcql().executeZCQLQuery("SELECT * FROM AlienCity WHERE CityName = '" + cityName + "'").then(queryResponse => { resolve(queryResponse); }).catch(err => { reject(err); }) }); } /** * Envía una respuesta de error * @param {*} res */ function sendErrorResponse(res) { res.status(500); res.send({ "error": "Internal server error occurred. Please try again in some time." }); } module.exports = app; ``` El directorio de funciones está ahora configurado. Discutiremos la arquitectura de la función y del cliente en la siguiente sección.