Tôi biết đây là một bài đăng cũ ... chỉ muốn đề cập đến một cách chắc chắn để nodejs giao tiếp với oracle mà không cần mô-đun bổ sung.
Thiết lập oracle để nó có thể tạo và nhận các yêu cầu http. Có một số cách để thực hiện việc này:
Cách dễ nhất là bật cổng epg:
Ngoài ra, bạn có thể thiết lập modplsq:
hoặc trình nghe Apex:
Sau đó, trong nút js thực hiện một http.get:
tiêu chuẩnhttp.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);
});
Cho dù cách tiếp cận nào ... bảo mật oracle để nó sẽ chỉ phản hồi địa chỉ ip của máy chủ nodejs. Vì vậy, nếu chạy trên localhost:
if owa_util.get_cgi_env('REMOTE_ADDR') = '127.0.0.1' then
--ok
else
-- fail
end if;
Đồng thời chặn các cuộc gọi đến mọi gói và thủ tục khác. Có một số cách để làm điều này tùy thuộc vào con đường bạn đi.
Đảm bảo rằng bạn làm điều này ở mức tối thiểu:
- tạo một danh sách trắng các mục có thể được gọi từ web
- yêu cầu tất cả các url phải chứa tên lược đồ, chẳng hạn như:myuser.myprocedure
- đảm bảo rằng phần đầu tiên của url (cho đến đường dẫn truy vấn) chỉ chứa a-z 0-9
- thực sự là một danh sách trắng tốt sẽ giải quyết hầu hết các mục này
Bạn đã có nó ... không cần phải lo lắng nếu một mô-đun sẽ bị hỏng hoặc ngừng hoạt động với bản phát hành tiếp theo.
VÀ ... bạn có thể dễ dàng giao tiếp từ Oracle sang Node sử dụng:
- apex_web_service.make_rest_request
- utl_http