Je sais que c'est un vieux post... je voulais juste mentionner un moyen sûr pour nodejs de communiquer avec oracle sans modules supplémentaires.
Configurez Oracle pour qu'il puisse créer et recevoir des requêtes http. Il existe plusieurs façons de procéder :
Le plus simple est d'activer la passerelle epg :
Vous pouvez également configurer modplsq :
ou l'écouteur Apex :
Ensuite, dans node js, faites un http.get standard :
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);
});
Quelle que soit l'approche ... sécurisez Oracle afin qu'il ne réponde qu'à l'adresse IP du serveur nodejs. Donc, si exécuté sur localhost :
if owa_util.get_cgi_env('REMOTE_ADDR') = '127.0.0.1' then
--ok
else
-- fail
end if;
Bloquez également les appels vers tous les autres packages et procédures. Il existe plusieurs façons de le faire en fonction du chemin que vous empruntez.
Assurez-vous de le faire au minimum :
- créer une liste blanche d'éléments pouvant être appelés depuis le Web
- exiger que toutes les URL contiennent le nom du schéma tel que :myuser.myprocedure
- assurez-vous que la première partie de l'URL (jusqu'au chemin de la requête) contient uniquement a-z 0-9
- vraiment une bonne liste blanche s'occupera de la plupart de ces éléments
Voilà... pas besoin de s'inquiéter si un module se cassera ou cessera de fonctionner avec la prochaine version.
ET...vous pouvez facilement communiquer d'Oracle à l'utilisation de Node :
- apex_web_service.make_rest_request
- utl_http