Tìm hiểu khả năng hỗ trợ của Edge cho các mô-đun Node.js

Bạn đang xem tài liệu về Apigee Edge.
Truy cập vào tài liệu Apigee X.
thông tin

Apigee Edge hỗ trợ phiên bản Node.js nào?

Edge hiện hỗ trợ Node.js 0.10.32.

Edge hỗ trợ những mô-đun Node.js tiêu chuẩn nào?

Hãy sử dụng bảng sau để xác định những mô-đun Node.js tiêu chuẩn được đưa vào Edge. Trong một số trường hợp, các mô-đun đi kèm chỉ được hỗ trợ một phần. Đây là các mô-đun được tích hợp sẵn trong Node.js.

Mô-đun Trạng thái Ghi chú
assert Được hỗ trợ
buffer Được hỗ trợ
child_process Bị hạn chế Một ngoại lệ sẽ được gửi nếu có nỗ lực tạo một quy trình con. Tuy nhiên, "fork" được hỗ trợ để tạo các tập lệnh con.
cluster Đã tắt Phương thức cluster.isMaster luôn trả về giá trị true và các phương thức khác không được triển khai. Một bản sao của mỗi tập lệnh Node.js được triển khai cho mỗi trình xử lý thông báo Edge.
crypto Được hỗ trợ
dns Được hỗ trợ
domain Được hỗ trợ
dgram Bị hạn chế Các ứng dụng Node.js trong môi trường Apigee sẽ không thể truy cập vào các dịch vụ trên Internet thông qua UDP do kiến trúc mạng của chúng tôi.
events Được hỗ trợ
fs Bị hạn chế Quyền truy cập vào hệ thống tệp bị hạn chế đối với thư mục nơi tập lệnh được khởi chạy: thư mục /resources/node. Các tập lệnh Node.js có thể đọc và ghi tệp trong thư mục này, chẳng hạn như một vùng tạm thời, nhưng không có gì đảm bảo về thời gian tồn tại của các tệp.
http Được hỗ trợ Máy chủ ảo và đường dẫn cho các yêu cầu đến được chỉ định trong API Proxy, chứ không phải do mô-đun HTTP. Hãy xem phần "Tìm hiểu về khả năng hỗ trợ cho các mô-đun http và https" để biết thêm thông tin.
https Được hỗ trợ Việc tạo một máy chủ "https" sẽ hoạt động giống hệt như một máy chủ "http". Hãy xem phần "Tìm hiểu về khả năng hỗ trợ cho các mô-đun http và https" để biết thêm thông tin.
module Được hỗ trợ
net Bị hạn chế Các lượt cố gắng nghe các kết nối TCP đến sẽ tạo ra một ngoại lệ.
path Được hỗ trợ
module Được hỗ trợ
process Hỗ trợ một phần Không hỗ trợ chức năng thao tác với mã nhận dạng người dùng, tư cách thành viên trong nhóm và thư mục làm việc.
punycode Được hỗ trợ
querystring Được hỗ trợ
readline Đã tắt Không có đầu vào tiêu chuẩn cho các tập lệnh chạy trên Apigee Edge.
repl Đã tắt Không có đầu vào tiêu chuẩn cho các tập lệnh chạy trên Apigee Edge.
module Đã bao gồm
STDIO Được hỗ trợ

Đầu ra và lỗi tiêu chuẩn được chuyển đến một tệp nhật ký trong cơ sở hạ tầng Apigee Edge. Bạn có thể xem các nhật ký này bằng cách nhấp vào nút Nhật ký Node.js trong giao diện người dùng quản lý Apigee Edge cho proxy API của bạn.

Không có đầu vào tiêu chuẩn cho các tập lệnh chạy trên Apigee Edge. Tuy nhiên, bạn có thể truyền các đối số bằng cách sử dụng phần tử ScriptTarget của TargetEndpoint. Hãy xem phần Cấu hình ScriptTarget nâng cao để biết thêm thông tin.

stream Được hỗ trợ
string_decoder Được hỗ trợ
timers Đã bao gồm
tls Được hỗ trợ Các tham số Bảo mật tầng truyền tải (TLS) hoạt động theo cách tương tự như trong Node.js thông thường. Hãy xem bài viết Sử dụng mô-đun TLS (SSL) Node.js trên Apigee Edge để biết thông tin chi tiết.
tty Đã tắt Không có đầu vào tiêu chuẩn cho các tập lệnh chạy trên Apigee Edge.
url Được hỗ trợ
util Được hỗ trợ
vm Được hỗ trợ
zlib Được hỗ trợ

Các mô-đun được hỗ trợ khác

Phần này liệt kê các mô-đun bổ sung không được hỗ trợ trong Node.js tiêu chuẩn, nhưng được Trireme và Trireme chạy trên Apigee Edge hỗ trợ. Trireme là vùng chứa Node.js nguồn mở chạy trên Apigee Edge. Nó được thiết kế để chạy các tập lệnh Node.js bên trong Máy ảo Java (JVM). Tất cả các mô-đun này đều có trên NPM.

Mô-đun Mô tả
apigee-access Cho phép các ứng dụng Node.js chạy trên nền tảng Apigee Edge truy cập vào chức năng dành riêng cho Apigee. Bạn có thể sử dụng mô-đun này để: truy cập và sửa đổi các biến luồng, truy xuất dữ liệu từ kho lưu trữ an toàn và sử dụng các dịch vụ bộ nhớ đệm, hạn mức và OAuth của Edge. Xem thêm phần Sử dụng mô-đun apigee-access.
trireme-support Cho phép các ứng dụng Node.js tận dụng các tính năng dành riêng cho Trireme. Hiện tại, chỉ có một tính năng được hỗ trợ là tải các mô-đun Node.js được tạo bằng Java. Lưu ý: loadJars không được hỗ trợ trong Edge Cloud.
trireme-xslt Trình bày một lớp trừu tượng về quá trình xử lý XLST. Thư viện này được thiết kế riêng cho nền tảng Trireme để cho phép xử lý hiệu quả XSLT khi các ứng dụng Node.js chạy trên Java.
trireme-jdbc Cung cấp quyền truy cập vào JDBC từ Node.js. Lưu ý: Không được hỗ trợ trong Edge Cloud. Đối với Edge Private Cloud, bạn có thể đặt tệp JDPC JAR vào đường dẫn lớp và sử dụng mô-đun này.

Hỗ trợ các mô-đun Node.js thường dùng

Các quy định hạn chế đối với tập lệnh Node.js

Tuy nhiên, hãy lưu ý rằng Edge áp đặt một số hạn chế đối với các tập lệnh Node.js, chẳng hạn như sau:

  • Các ứng dụng Node.js trong môi trường Apigee Edge không thể truy cập vào các dịch vụ trên Internet thông qua UDP do kiến trúc mạng Edge.
  • Quyền truy cập vào hệ thống tệp bị hạn chế đối với thư mục nơi tập lệnh Node.js được khởi chạy: thư mục /resources/node. Các tập lệnh Node.js có thể đọc và ghi tệp trong thư mục này, chẳng hạn như một vùng tạm thời, nhưng không có gì đảm bảo về thời gian tồn tại của các tệp.
  • Các lượt cố gắng nghe các kết nối TCP đến sẽ tạo ra một ngoại lệ.
  • Không hỗ trợ chức năng thao tác với mã nhận dạng người dùng, tư cách thành viên trong nhóm và thư mục làm việc.
  • Đối với đầu vào tiêu chuẩn, bạn chỉ có thể truyền các đối số bằng cách sử dụng phần tử ScriptTarget của TargetEndpoint. Hãy xem phần Cấu hình ScriptTarget nâng cao để biết thêm thông tin.
  • Đối với đầu ra chuẩn, bạn chỉ có thể sử dụng nút Nhật ký Node.js trong giao diện người dùng quản lý Edge cho proxy của mình. Bạn cũng có thể dùng lệnh "apigeetool getlogs". Để biết thêm thông tin, hãy xem bài viết Triển khai một ứng dụng Node.js độc lập.
  • Không hỗ trợ các mô-đun phụ thuộc vào mã gốc.
  • Các mô-đun phụ thuộc vào các tính năng EcmaScript 6, chẳng hạn như Lời hứa và Trình tạo, không được hỗ trợ.
  • Các cờ thời gian chạy Node.js như "harmony-proxies" không được hỗ trợ.

Đặt quy định hạn chế về kết nối IP trên Edge cho Private Cloud

Edge for Private Cloud có thể hạn chế mã Node.js truy cập vào địa chỉ IP bắt đầu bằng "10.", "192.168" và localhost. Nếu cố gắng truy cập vào các địa chỉ IP này, bạn sẽ thấy một lỗi có dạng:

{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }

Bạn có thể sửa đổi các hạn chế này bằng cách đặt thuộc tính conf_nodejs_connect.ranges.denied trong tệp message-processors.properties cho mỗi Trình xử lý thông báo. Theo mặc định, thuộc tính này có giá trị:

  • Edge 4.17.05 trở xuống: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge 4.17.09 trở lên: conf_nodejs_connect.ranges.denied= (nghĩa là không có hạn chế)

Cách đặt thuộc tính này:

  1. Mở tệp message-processor.properties trong một trình chỉnh sửa. Nếu tệp này không tồn tại, hãy tạo tệp:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Đặt thuộc tính theo ý muốn. Ví dụ: để từ chối quyền truy cập vào chỉ máy chủ cục bộ:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. Lưu thay đổi.
  4. Đảm bảo tệp thuộc tính thuộc về người dùng "apigee":
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Khởi động lại Trình xử lý thông báo:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Tìm hiểu về khả năng hỗ trợ cho các mô-đun http và https

Tất cả các ứng dụng Node.js chạy trong Apigee Edge đều phải sử dụng mô-đun http hoặc https để theo dõi các yêu cầu đến. Nếu bạn triển khai một tập lệnh không theo dõi các yêu cầu đến, thì tập lệnh đó sẽ chỉ thực thi và thoát.

Phương thức listen của các mô-đun httphttps trong Node.js lấy số cổng làm tham số. Ví dụ:

svr.listen(process.env.PORT || 9000, function() {
   console.log('The server is running.');
});

Đối số "port" là bắt buộc trong Node.js, nhưng Apigee Edge bỏ qua tham số này. Thay vào đó, proxy API mà tập lệnh Node.js chạy sẽ chỉ định "máy chủ ảo" mà proxy đó theo dõi và ứng dụng Node.js sẽ sử dụng chính những máy chủ ảo đó, giống như mọi proxy Apigee Edge khác.

Mỗi môi trường trong Apigee đều có ít nhất một máy chủ ảo. Máy chủ ảo xác định các chế độ cài đặt HTTP để kết nối với tổ chức Apigee. Tất cả các proxy API trong một môi trường đều dùng chung cùng một máy chủ ảo. Theo mặc định, mỗi môi trường sẽ có 2 máy chủ ảo: defaultsecure. Để biết thêm thông tin, hãy xem phần Nhận máy chủ ảovòng đời phát triển API.

Lệnh apigeetool deploynodeapp tạo một trình bao bọc proxy Apigee Edge xung quanh ứng dụng Node.js. Khi được triển khai, ứng dụng Node.js sẽ theo dõi trên máy chủ ảo mặc định được xác định cho môi trường. URL của ứng dụng Node.js sẽ luôn là http://{org_name}-{env_name}.apigee.net.

Xử lý các yêu cầu đến

Giống như các ứng dụng Apigee Edge khác, nếu ứng dụng proxy được thiết lập để theo dõi trên máy chủ ảo secure, thì ứng dụng đó sẽ chấp nhận các yêu cầu đến bằng HTTPS.

Xử lý các yêu cầu đi

Ngoài việc nhận lưu lượng truy cập đến, các ứng dụng Node.js bên trong Apigee Edge có thể dùng các mô-đun httphttps để thực hiện các yêu cầu đi như mọi ứng dụng Node.js khác. Các mô-đun này hoạt động như bình thường trong Node.js.

Tìm hiểu về việc hỗ trợ mô-đun tls

Apigee Edge hỗ trợ mô-đun tls Node.js. Mô-đun này sử dụng OpenSSL để cung cấp giao tiếp luồng được mã hoá bằng giao thức Bảo mật tầng truyền tải (TLS) và/hoặc Lớp cổng bảo mật (SSL). Bạn có thể dùng mô-đun tls để tạo các kết nối an toàn đến các dịch vụ phụ trợ từ các ứng dụng Node.js đang chạy trên Edge.

Để hiểu cách hoạt động của mô-đun tls trên Apigee Edge, bạn cần hiểu cách virtual hosts được dùng trên Apigee Edge. Mọi môi trường trong Apigee đều có ít nhất một máy chủ ảo. Máy chủ ảo xác định các chế độ cài đặt HTTP để kết nối với tổ chức Apigee. Tất cả các proxy API trong một môi trường đều dùng chung máy chủ ảo. Theo mặc định, mỗi môi trường sẽ có 2 máy chủ ảo: defaultsecure. Để biết thêm thông tin về máy chủ ảo, hãy xem phần Lấy máy chủ ảovòng đời phát triển API.

Bây giờ, hãy xem cách Apigee Edge xử lý giao tiếp TLS (SSL) cho các yêu cầu đến và đi trên các ứng dụng Node.js:

Xử lý các yêu cầu đến

Tuỳ thuộc vào cách máy chủ ảo được định cấu hình cho tổ chức của bạn, Edge cung cấp các lựa chọn sau:

  • Nếu được định cấu hình để theo dõi trên máy chủ ảo default, thì proxy API sẽ chấp nhận các yêu cầu qua HTTP.
  • Nếu được định cấu hình để theo dõi trên máy chủ ảo secure, thì proxy API sẽ chấp nhận các yêu cầu qua HTTPS. URL sẽ nằm trong miền apigee.net và chứng chỉ SSL ký tự đại diện cho *.apigee.net sẽ được sử dụng. Miễn là các ứng dụng đưa ra yêu cầu đến miền apigee.net, thì chứng chỉ SSL sẽ xác thực bình thường.

Xử lý các yêu cầu đi

Bạn có thể đưa ra các yêu cầu đi bằng mô-đun tls theo cách mà bạn thường làm trong Node.js. Về cơ bản, bạn cần thêm khoá và chứng chỉ phía máy khách (tệp .pem) vào thư mục resources/node và tải chúng vào trong tập lệnh. Để biết thông tin về cách sử dụng mô-đun tls và các phương thức của mô-đun này, hãy xem tài liệu về mô-đun tls của Node.js.

Cấu hình ScriptTarget nâng cao

Trong định nghĩa <TargetEndpoint>, phần tử <ScriptTarget> có thêm các tham số không bắt buộc ngoài <ResourceURL>. Bạn cũng có thể truyền các đối số dòng lệnh và biến môi trường đến một tập lệnh Node.js bằng cách sử dụng các tham số <EnvironmentVariables> và <Arguments>:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>