Eu sei que este é um post antigo... só queria mencionar uma maneira segura de os nodejs se comunicarem com o oracle sem módulos extras.
Configure o oracle para que ele possa criar e receber solicitações http. Há algumas maneiras de fazer isto:
O mais fácil é ativar o gateway epg:
Além disso, você pode configurar o modplsq:
ou o ouvinte do Apex:
Em seguida, no nó js, faça um http.get padrão:
http.get("http://localhost/accessor/myschema.my_procedure?x=1&y=2", function(res) {
console.log("Got response: " + res.statusCode);
}).on('error', function(e) {
console.log("Got error: " + e.message);
});
Qualquer que seja a abordagem... proteja o oráculo para que ele responda apenas ao endereço IP do servidor nodejs. Então, se estiver executando no localhost:
if owa_util.get_cgi_env('REMOTE_ADDR') = '127.0.0.1' then
--ok
else
-- fail
end if;
Também bloqueia chamadas para todos os outros pacotes e procedimentos. Existem algumas maneiras de fazer isso, dependendo do caminho que você toma.
Certifique-se de fazer isso no mínimo:
- criar uma lista branca de itens que podem ser chamados da web
- exigir que todos os URLs contenham o nome do esquema, como:myuser.myprocedure
- certifique-se de que a primeira parte do URL (até o caminho da consulta) contém apenas a-z 0-9
- uma boa lista branca cuidará da maioria desses itens
Aí está... não precisa se preocupar se um módulo vai quebrar ou parar de funcionar com a próxima versão.
E... você pode se comunicar facilmente do Oracle para o uso do Node:
- apex_web_service.make_rest_request
- utl_http