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 ) 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 y package-lock.json
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. 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:
Esto instalará el módulo Express y guardará las dependencias.
Esta información también se actualizará en el archivo package.json.
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.
'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.
Última actualización 2026-03-20 21:51:56 +0530 IST

