HIX -> Consumiendo API Node.js

mod_harbour is an Apache module that allows to run PRGs directly on the web !!!
Post Reply
csincuir
Posts: 483
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Has thanked: 3 times
Been thanked: 23 times
Contact:

HIX -> Consumiendo API Node.js

Post by csincuir »

Realizando prueba con HIX para consumir una API de Node.js para acceder a un servidor MaridaDB / MySQL:

Code: Select all | Expand

#xcommand TRY  => BEGIN SEQUENCE WITH {| oErr | Break( oErr ) }
#xcommand CATCH [<!oErr!>] => RECOVER [USING <oErr>] <-oErr->
#xcommand FINALLY => ALWAYS

function main()

  local cHtml := '', oHttp, cUrl, cJson, hParams, cResponse
  
  hParams := {=>}
  hParams["action"] := "ping"
  cJson := hb_jsonEncode( hParams )

  cUrl := "http://192.168.0.50:3002/api/ping"
  oHttp := TApiConnNodeJs()
  oHttp:Open( "GET", cUrl, .F. )
  
  oHttp:SetRequestHeader( "Content-Type", "application/json" )
  oHttp:SetRequestHeader( "Accept", "application/json" )
  oHttp:SetRequestHeader( "Cache-Control", "no-cache" )

  oHttp:SetRequestHeader( "Connection", "Keep-Alive" )
  oHttp:Send( cJson )  
  cResponse := oHttp:responseText

  cHtml += '<h2>Information test ApiNodeJs</h2><hr>'
  cHtml += '<small>Processed at ' + dtoc(date()) + ' ' + time() + '</small>'
  cHtml += '<hr>'
  cHtml += 'responseText: ' +cResponse
 
return cHtml 

//-------------------------------------------------------------------------------------------------------------------
function TApiConnNodeJs()
LOCAL lHttp, oHttp

lHttp := .f.

TRY
  oHttp := CreateObject( "MSXML2.ServerXMLHTTP.6.0" )
  lHttp := .t.
CATCH
  lHttp := .f.
END

IF !lHttp
	TRY
	  oHttp := CreateObject( "MSXML2.ServerXMLHTTP" )
	  lHttp := .t.
	CATCH
	  oHttp := CreateObject( "MSXML2.XMLHTTP" )
	  lHttp := .t.
	END
END

RETURN oHttp
Y este es el resultado:
Image

El api de Node.js esta instalado en un servidor local con Linux Ubuntu 24.04.

Gran trabajo Carles con HIX.

Saludos cordiales.

Carlos.
Adolfredo Martinez
Posts: 141
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia
Been thanked: 5 times

Re: HIX -> Consumiendo API Node.js

Post by Adolfredo Martinez »

Hola Csincuir.

Porque nos hace el favor y nos muestra la configuaracion de Routes, la configuracion del server

csincuir
Posts: 483
Joined: Sat Feb 03, 2007 6:36 am
Location: Guatemala
Has thanked: 3 times
Been thanked: 23 times
Contact:

Re: HIX -> Consumiendo API Node.js

Post by csincuir »

Hola Adolfredo.

Claro, aquí está la configuración de mi API en Node.js:
Configuración del servidor (server.js):

Code: Select all | Expand

const express = require('express');
const mysql = require('mysql2/promise');
const cors = require('cors');
const compression = require('compression');

const app = express();
const PORT = 3002;

// Middleware
app.use(cors());
app.use(compression());
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ extended: true, limit: '50mb' }));

// Pool de conexiones MySQL (reutilizable)
let connectionPools = new Map();

// Logging
app.use((req, res, next) => {
    console.log(`[${new Date().toISOString()}] ${req.method} ${req.path}`);
    next();
});

// Endpoint de ping (GET)
app.get('/api/ping', (req, res) => {
    res.json({ 
        success: true, 
        message: 'API MySQL Node.js funcionando correctamente',
        timestamp: new Date().toISOString(),
        version: '1.1.0'
    });
});

// Endpoint para ejecutar queries (POST)
app.post('/api/query', async (req, res) => {
    // Recibe: host, user, password, database, query, params
    // Ejecuta el query y devuelve resultados
});

// Otros endpoints: /api/transaction, /api/table/structure, /api/test-connection

// Iniciar servidor
app.listen(PORT, '0.0.0.0', () => {
    console.log(`Servidor escuchando en http://0.0.0.0:${PORT}`);
});

Endpoints disponibles:

Code: Select all | Expand

GET /api/ping - Verificar estado del servidor
POST /api/query - Ejecutar consultas SQL
POST /api/transaction - Transacciones múltiples
POST /api/test-connection - Probar conexión
POST /api/table/structure - Obtener estructura de tabla

La API usa pool de conexiones MySQL para mejor rendimiento y acepta parámetros de conexión dinámicos en cada request.

Es una adaptacion que estoy haciendo de Eagle1 de Manu Exposito, pero con Node.js (Como una prueba mía, para comparar velocidades de respuesta, pero, Eagle1 es bastante rapida, tanto como Node.js)

Espero te sirva.

Saludos cordiales.

Carlos Sincuir

Adolfredo Martinez
Posts: 141
Joined: Fri Feb 15, 2019 1:37 pm
Location: Aracataca-Colombia
Been thanked: 5 times

Re: HIX -> Consumiendo API Node.js

Post by Adolfredo Martinez »

Hola Csincuir

Gracias, cualquier inquietud te estaré molestando.

Post Reply