Integración de apex más node js Parte 3

¡Por fiiiin amigos! ha llegado la hora de conectar socket io desde node con apex, mi parte favorita porque es la que más le gusta a los usuarios. En fin, te sugiero veas el vídeo y aquí te dejo el código usado en el vídeo y la app para que no tengas ningún problema al usarla y analizarla.

¡NO OLVIDES CREAR EL ACL!

Javascript

var socket = io('//localhost:3002');

socket.on('connect', function(){
    console.log('Cliente conectado')
});

socket.on('mensaje', function(res){
    console.log('API NODE ' , res);
    newUser();
})

function newUser(){
    
    apex.server.process(
    'GuardarDatosDePstgresql', // Process or AJAX Callback name
    {},  // Parameter "x01"
    {
      success: function (pData) {             // Success Javascript
        var region = apex.region( "reporte" );
        var chart = apex.region("chartusers");
        region.refresh();
        chart.refresh();
      },
      dataType: "text"                        // Response type (here: plain text)
    }
  );
    
    
    //GuardarDatosDePstgresql
}

AJAX CALLBACK

declare
	l_request	SYS.utl_http.req;
	l_response	SYS.utl_http.resp;
	l_download	RAW(32767);
    l_url_o varchar2(4000) := '//localhost:3002/user/';
    l_url varchar2(200);
    l_plain varchar(4000);
    jo          JSON_OBJECT_T;
    ja          JSON_ARRAY_T;
    keys        JSON_KEY_LIST;
    keys_string VARCHAR2(100);
begin
  
    l_request := SYS.utl_http.begin_request(l_url_o);
    SYS.utl_http.set_header(l_request, 'User-Agent', 'Mozilla/5.0 (Windows NT x.y; Win64; x64; rv:10.0) Gecko/20100101 Firefox/10.0');
    l_response := SYS.utl_http.get_response(l_request);
    
    LOOP
    BEGIN
        SYS.utl_http.read_raw(l_response, l_download);
        
        l_plain := UTL_RAW.CAST_TO_VARCHAR2 (l_download) ;  
       
       for rec IN (
         select j.usuario,j.nombre , j.email, j.direccion, j.id
           from json_table(l_plain,'$[*]' COLUMNS 
            usuario varchar2(255)      PATH '$.usuario',
            nombre varchar2(255)       PATH '$.nombre',
            email varchar2(255)      PATH '$.email',
            direccion varchar2(255)       PATH '$.direccion',
            id number       PATH '$.id'
           ) j  ) 
         LOOP
            insert into usuarios (usuario,nombre,email,direccion,id) values
            (rec.usuario,rec.nombre,rec.email,rec.direccion,rec.id);
       END LOOP;
    
        commit;
        
        EXCEPTION WHEN SYS.utl_http.end_of_body THEN
            EXIT;
        END;
    END LOOP;
    

    SYS.utl_http.end_response(l_response);

end;

CREAR ACL

DECLARE
  l_acl       VARCHAR2(100) := 'apinodejs.xml';
  l_desc      VARCHAR2(100) := 'descripción del acl';
  l_principal VARCHAR2(30)  := 'APEXDEVELOPERS'; -- EN MAYÚSCULAS
  l_host      VARCHAR2(100) := 'localhost'; --nombre del host
BEGIN
  -- Crea el nuevo ACL
  -- Proveer privilegios de conexión 
  dbms_network_acl_admin.create_acl(l_acl, l_desc, l_principal, TRUE, 'connect');
 
  -- Permisos de resolución de DNS
  dbms_network_acl_admin.add_privilege(l_acl, l_principal, TRUE, 'resolve');
 
  -- Pasamos lo parámetros nombre del acl y host
  dbms_network_acl_admin.assign_acl(l_acl, l_host);
 
  COMMIT;
END;
/

SELECT host, lower_port, upper_port, acl
FROM   dba_network_acls;
/

 

Vídeo

Descarga la app de apex

Link de descarga de la aplicación

 

Ligas de interés

https://cdnjs.com/libraries/socket.io

https://expressjs.com/ 

https://expressjs.com/en/resources/middleware/cors.html

https://node-postgres.com/

https://socket.io/

Post sugerido:

Curso Gratuito de Oracle Apex

Por favor si te sirvió el vídeo, invítame un café dando clic a los anuncios, me ayuda muchísimo para no dormir y poder hacer más posts 😎

2 comments on “Integración de ORACLE APEX + NODE JS + POSTGRESQL Parte 3

  1. Gracias Enrique por tan buen aporte a los que nos iniciamos en APEX. Tengo una consulta. Haciendo este ejercicio, obtuve el siguiente error cuando di F12 a la ejecución en APEX:

    Access to fetch at ‘http://localhost:3002/socket.io/?EIO=4&transport=polling&t=OineIfd’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled

    ¿Como puedo resolverlo ? Gracias

    1. Hola Marco instala cors

      npm install cors –save

      y agregas estas lineas

      var whitelist = [‘http://localhost:8080’, ‘http://localhost:8081’]
      var corsOptionsDelegate = function (req, callback) {
      var corsOptions;
      if (whitelist.indexOf(req.header(‘Origin’)) !== -1) {
      corsOptions = { origin: true } // reflect (enable) the requested origin in the CORS response
      }else{
      corsOptions = { origin: false } // disable CORS for this request
      }
      callback(null, corsOptions) // callback expects two parameters: error and options
      }

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.