--- title: "Configurar la función Advanced I/O" url: https://docs.catalyst.zoho.com/es/tutorials/payslip-generator-app/nodejs/configure-function/ description: "Construya una aplicación web que utiliza Catalyst para generar un PDF a partir de una plantilla de nómina dinámica, y enviarlo por correo al usuario final." 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 función Advanced I/O Ahora, comenzaremos a codificar la aplicación generadora de nóminas 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/payslip_generator_function` contiene: * El archivo principal de la función `index.js` * El archivo de configuración `catalyst-config.json` * Módulos de Node * 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: * Activa el [SDK de PDF & Screenshot](https://docs.catalyst.zoho.com/es/sdk/nodejs/v2/smartbrowz/generate-pdfnscreenshot/#generate-visual-documents-using-template) para ejecutar un navegador headless donde renderizamos los detalles ingresados en la plantilla y generamos un documento PDF. * Activa el [SDK de Send Mail](https://docs.catalyst.zoho.com/es/sdk/nodejs/v2/cloud-scale/mail/send-email/) para adjuntar el documento PDF y enviarlo por correo electrónico desde dentro de la aplicación. ### Instalar el framework Express para Node.js Utilizaremos el [framework Express](https://expressjs.com/) para codificar la función Advanced I/O. 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/payslip_generator_function`) en su terminal y ejecute el siguiente comando: ```sh npm install express --save ``` Esto instalará el módulo Express y guardará las dependencias. ![catalyst_payslip_express_install](https://catalyst-docs-development.zohostratus.in/images/tutorials/payslip-generator/catalyst_payslip_express_install.webp) Esta información también se actualizará en el archivo `package.json`. ![catalyst_payslip_package_json](https://catalyst-docs-development.zohostratus.in/images/tutorials/payslip-generator/catalyst_payslip_package_json.webp) Ahora, comencemos a codificar la función Advanced I/O. Copie el código proporcionado a continuación y péguelo en `index.js` en el directorio `functions/payslip_generator_function` de su proyecto, y guarde el archivo. Puede usar cualquier IDE de su elección para trabajar con los archivos de la aplicación. > **Nota:** * Por favor, revise el código en esta sección para asegurarse de que lo comprende completamente. * Asegúrese de haber proporcionado su **Template ID** en la línea **33**, y el **ID de correo electrónico** configurado en la línea **68**. **index.js** ```javascript 'use strict' const express = require('express') const catalyst = require('zcatalyst-sdk-node') const fs = require('fs') const app = express() const os = require('os') const path = require('path') app.use(express.json()) app.post('/generatepayslip', async (req, res) => { try { const catalystApp = catalyst.initialize(req) const smartbrowz = catalystApp.smartbrowz() if (!req.body) { throw new Error('Request body is empty') } const { employeeName, employeeEmail, employeeId, designation, basicSalary, allowances, deductions, paymentMethod } = req.body const date = new Date() const currentMonth = date.toLocaleString('default', { month: 'long' }) const currentYear = date.getFullYear() const filepath = path.join(os.tmpdir(), '/payslip.pdf') // Generar salida desde la plantilla await smartbrowz .generateFromTemplate('xxxxxxxx12345', // Proporcione su Template ID { // Datos que se pasan a la plantilla recuperados del client template_data: { company: 'Zylker Technologies', employeeName, employeeId, designation, basicSalary, allowances, deductions, totalEarnings: parseFloat(basicSalary) + parseFloat(allowances), netSalary: parseFloat(basicSalary) + parseFloat(allowances) - parseFloat(deductions), paymentMethod, month: currentMonth, year: currentYear } }) .then((inputStream) => { return new Promise((resolve, reject) => { inputStream .pipe(fs.createWriteStream(filepath)) .on('close', resolve) .on('error', reject) }) }).catch((err) => { throw err }) await catalystApp .email() .sendMail({ from_email: 'emmy@zylker.com', // Proporcione su ID de correo electrónico configurado en la Consola to_email: [employeeEmail], html_mode: true, subject: `Payslip for the month of ${currentMonth} ${currentYear}`, content: `Hello ${employeeName}, Your payslip for ${currentMonth} ${currentYear} has been issued. You can find your payslip attached with this email. Cheers,Zylker`, attachments: [fs.createReadStream(filepath)] // crear un flujo de archivo para el archivo adjunto }) .then((row) => { res.status(200).send('Payslip generated and sent to Employee email') }) .catch((err) => { throw err }) } catch (error) { console.log(error) res.status(500).send(error) } }) module.exports = app ``` El directorio de la función está ahora configurado. Ahora podemos proceder a configurar el directorio del client.