--- title: "Configurar la función Event" url: https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/nodejs/configure-event-function/ description: "Construya una aplicación web que sincronice archivos entre Catalyst Stratus y Zoho WorkDrive a través de APIs, usando funciones de Catalyst y Event Listener." last_updated: 2026-11-04T10:10:44Z service: All Services type: tutorial related_links: - name: "Event Functions" url: /es/serverless/help/functions/event-functions --- # Configurar la función Event Ahora comenzaremos a codificar la aplicación WorkDrive Sync configurando la función Event. > **Nota:** Necesitaremos codificar y desplegar el código de la aplicación en la consola remota de Catalyst antes de configurar el event listener en la consola de Catalyst, porque tenemos que asociarlo con la función Event. El [directorio de funciones](https://docs.catalyst.zoho.com/es/cli/v1/project-directory-structure/functions-directory) `functions/workdrivesync` contiene: * El archivo principal de función `index.js` * El archivo de configuración `catalyst-config.json` * Módulos de Node * Archivos de dependencia `[package.json](https://docs.npmjs.com/files/package.json)` y `[package-lock.json](https://docs.npmjs.com/configuring-npm/package-lock-json.html)` Puede usar cualquier IDE para configurar la función. ### Instalar paquetes para Node.js La función Event de Node.js requiere la instalación de tres paquetes: [`axios`](https://www.npmjs.com/package/axios), [`form-data`](https://www.npmjs.com/package/form-data), y [`fs`](https://www.npmjs.com/package/fs). #### `axios` `axios` es un cliente HTTP basado en promesas que usaremos para enviar solicitudes HTTP asíncronas al endpoint de la API de WorkDrive para publicar archivos. Para instalar `axios`, navegue al directorio de la función Node (`functions/workdrivesync`) y ejecute el siguiente comando: ```sh npm install axios ``` This will install the module. ![catalyst_workdrive_npm_axios](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/catalyst_workdrive_npm_axios.webp) #### `form-data` Usaremos `form-data` para cargar el archivo a WorkDrive, después de leerlo de los datos del evento enviados por el event listener. Para instalar `form-data`, navegue al directorio de la función Node (`functions/workdrivesync`) y ejecute el siguiente comando: ```sh npm install form-data ``` Esto instalará el módulo. ![catalyst_workdrive_npm_formdata](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/catalyst_workdrive_npm_formdata.webp) #### `fs` El módulo `fs` nos permite acceder al sistema de archivos físico y crear un flujo de lectura para obtener el archivo de los datos del evento. Para instalar `fs`, navegue al directorio de la función Node (`functions/workdrivesync`) y ejecute el siguiente comando: ```sh npm install fs ``` Esto instalará el módulo. ![catalyst_workdrive_npm_fs](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/catalyst_workdrive_npm_fs.webp) #### `qs` El módulo `qs` ayuda con el análisis y la serialización de cadenas de consulta de URL al trabajar con APIs o datos que necesitan ser enviados o recibidos a través de parámetros de consulta. Para instalar `qs`, navegue al directorio de la función Node (`functions/workdrivesync`) y ejecute el siguiente comando: ```sh npm install qs ``` La información sobre estos paquetes también se actualizará en el archivo [`package.json`](https://docs.npmjs.com/files/package.json) de la función Event. ```json { "name": "workdrivesync", "version": "1.0.0", "main": "index.js", "author": "emma@zylker.com", "dependencies": { "axios": "^1.13.1", "form-data": "^4.0.4", "fs": "^0.0.1-security", "qs": "^6.14.0", "zcatalyst-sdk-node": "latest" } } ``` Ahora puede agregar el código en el archivo de la función. Copie el código a continuación y péguelo en `index.js` ubicado en el directorio `functions/workdrivesync` y guarde el archivo. > **Nota:** Revise el código en esta sección para asegurarse de que lo comprende completamente. Discutiremos el código de la función y del cliente después de que configure el cliente. **index.js** ```javascript const catalyst = require('zcatalyst-sdk-node'); const axios = require('axios').default; const FormData = require('form-data'); const fs = require('fs'); const credentials = { WorkDriveConnector: { client_id: '{{YOUR_CLIENT_ID}}', //Ingrese su Client ID client_secret: '{{YOUR_CLIENT_SECRET}}', //Ingrese su Client Secret auth_url: 'https://accounts.zoho.com/oauth/v2/token', refresh_url: 'https://accounts.zoho.com/oauth/v2/token', refresh_token: '{{YOUR_REFRESH_TOKEN}}' //Ingrese su Refresh Token } } const FOLDERID = '5m0kq28f2efdbc2464a37866cec7d6580cb47'; //Ingrese su ID de carpeta de WorkDrive module.exports = async (event, context) => { try { const eventData = event.getRawData().events[0]; const eventType = eventData.event_config.api_name; const fileName = eventData.data.object_details[0].key; const app = catalyst.initialize(context); const query = `SELECT ROWID, WorkDriveFileID FROM FileVault where FileName='${fileName}'`; const queryResult = await app.zcql().executeZCQLQuery(query); console.log(queryResult); const ROWID = queryResult[0].FileVault.ROWID; const accessToken = await app.connection(credentials).getConnector('WorkDriveConnector').getAccessToken(); if (eventType === "stratus_object_uploaded") { const stratus = app.stratus(); const bucket = stratus.bucket("file-vault-demo"); // Reemplace con el nombre de su bucket let fileStream = await bucket.getObject(fileName); const chunks = []; for await (const chunk of fileStream) { chunks.push(chunk); } const buffer = Buffer.concat(chunks); fs.writeFileSync(__dirname + '/' + fileName, buffer); var data = new FormData(); data.append('content', fs.createReadStream(__dirname + '/' + fileName)); const config = { method: 'POST', url: `https://workdrive.zoho.com/api/v1/upload?filename=${fileName}&override-name-exist=true&parent_id=${FOLDERID}`, headers: { 'Authorization': `Zoho-oauthtoken ${accessToken}`, ...data.getHeaders() }, data: data }; const response = await axios(config); console.log(response); const WorkDriveSync = 'Uploaded'; const body = response.data; const WorkDriveFileID = body.data[0].attributes.resource_id; const catalystTable = app.datastore().table('FileVault'); await catalystTable.updateRow({ WorkDriveFileID, WorkDriveSync, ROWID }); } else if (eventType === "stratus_object_deleted") { const WorkDriveFileID = queryResult[0].FileVault.WorkDriveFileID; const config = { method: "PATCH", url: `https://workdrive.zoho.com/api/v1/files/${WorkDriveFileID}`, headers: { Authorization: `Zoho-oauthtoken ${accessToken}`, Accept: "application/vnd.api+json", }, data: JSON.stringify({ data: { attributes: { status: "51", }, type: "files", }, }), }; console.log(config); await axios(config); const table = app.datastore().table("FileVault"); await table.deleteRow(ROWID); } context.closeWithSuccess(); } catch (err) { console.log(err); context.closeWithFailure(); } }; ``` > **Nota:** Después de copiar y pegar este código en su archivo de función, asegúrese de proporcionar los siguientes valores como se indica en los comentarios: * **[Client ID](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/nodejs/register-client)** * **[Client Secret](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/nodejs/register-client)** * Los enlaces de servicios de Zoho utilizados en este código (por ejemplo, accounts.zoho.com, workdrive.zoho.com, etc.) son específicos del Centro de Datos (DC). Reemplace .com con el dominio de su centro de datos de Zoho correspondiente. Asegúrese de que todas las URLs en el código usen el mismo dominio del DC para evitar errores de autenticación o API. * **[Refresh Token](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/nodejs/generate-refresh-token)** * [ID de carpeta de WorkDrive](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/nodejs/create-workdrive-folder): Puede obtener este valor abriendo la [carpeta que creó en WorkDrive anteriormente](https://docs.catalyst.zoho.com/es/tutorials/workdrivesync/nodejs/create-workdrive-folder). La URL contiene el ID de carpeta de la carpeta de WorkDrive. Copie el ID que se muestra después de `folders/` en la URL. ![catalyst_workdrive_folderid](https://catalyst-docs-development.zohostratus.in/images/tutorials/workdrivesync/workdrive-folder-id-through-link.webp) La función Event está ahora configurada.