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.
Chuyển đến tài liệu về Apigee X.
thông tin

Phiên bản Node.js nào được hỗ trợ trên Apigee Edge?

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

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

Sử dụng bảng sau đây để xác định những mô-đun Node.js tiêu chuẩn nào có trên 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à những mô-đun được tích hợp sẵn trong Node.js.

Mô-đun Trạng thái Ghi chú
assert Có thể làm
buffer Có thể làm
child_process Bị hạn chế Hệ thống sẽ gửi một ngoại lệ nếu bạn cố tạo một quy trình phụ. Tuy nhiên, hệ thống hỗ trợ "nĩa" để tạo các chỉ số dưới.
cluster Đã tắt Phương thức Cụm.isMaster luôn trả về giá trị true (đúng) 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ó thể làm
dns Có thể làm
domain Có thể làm
dgram Bị hạn chế Do cấu trúc mạng của chúng tôi, 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.
events Có thể làm
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 đã chạy: thư mục /resources/node. Tập lệnh Node.js có thể đọc và ghi các tệp trong thư mục này, ví dụ như dưới dạng 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ác tệp.
http Có thể làm Máy chủ ảo và đường dẫn cho các yêu cầu đến được chỉ định trong Proxy API chứ không phải trong mô-đun HTTP. Hãy xem phần "Tìm hiểu về khả năng hỗ trợ các mô-đun http và https" để biết thêm thông tin.
https Có thể làm Thao tác tạo máy chủ "https" hoạt động giống hệt với máy chủ "http". Hãy xem phần "Tìm hiểu về việc hỗ trợ các mô-đun http và https" để biết thêm thông tin.
module Có thể làm
net Bị hạn chế Việc cố gắng lắng nghe các kết nối TCP đến sẽ tạo ra một ngoại lệ.
path Có thể làm
module Có thể làm
process Hỗ trợ một phần Chức năng thao túng mã nhận dạng người dùng, thành viên nhóm và thư mục đang làm việc không được hỗ trợ.
punycode Có thể làm
querystring Có thể làm
readline Đã tắt Không có đầu vào chuẩn nào cho các tập lệnh chạy trên Apigee Edge.
repl Đã tắt Không có đầu vào chuẩn nào cho các tập lệnh chạy trên Apigee Edge.
module Đã bao gồm
STDIO Có thể làm

Đầu ra tiêu chuẩn và lỗi đượ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 mình.

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

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

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. Tuy nhiên, các mô-đun này đượ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. Công cụ này đượ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 MAP.

Mô-đun Nội dung 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ể dùng mô-đun này để: truy cập và sửa đổi các biến của luồng, truy xuất dữ liệu từ kho lưu trữ bảo mật, cũng như sử dụng các dịch vụ OAuth, hạn mức và bộ nhớ đệm của Edge. Hãy xem thêm phần Sử dụng mô-đun truy cập apigee.
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ích hợp trong Java. Lưu ý: loadJars không được hỗ trợ trong Edge Cloud.
trireme-gtmt Trình bày đặc điểm trừu tượng của quá trình xử lý XLST. API này được thiết kế riêng cho nền tảng Trireme để cho phép xử lý hiệu quả GCC khi các ứng dụng Node.js chạy trên Java.
trireme-jdbc Cấp quyền truy cập vào JDBC từ Node.js. Lưu ý: Không hỗ trợ trong Edge Cloud. Đối với Edge Private Cloud, bạn có thể đặt các tệp JAR JDPC 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

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

Tuy nhiên, hãy lưu ý rằng Edge đặt ra một số hạn chế nhất định đố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 cấu trúc mạng Edge.
  • Quyền truy cập vào hệ thống tệp bị hạn chế ở thư mục nơi tập lệnh Node.js đã khởi chạy: thư mục /resources/node. Tập lệnh Node.js có thể đọc và ghi các tệp trong thư mục này, ví dụ: dưới dạng vùng tạm thời, nhưng không có gì đảm bảo về thời gian tồn tại các tệp.
  • Việc cố gắng theo dõi các kết nối TCP đến sẽ tạo ra một ngoại lệ.
  • Chức năng thao túng mã nhận dạng người dùng, thành viên nhóm và thư mục đang làm việc không được hỗ trợ.
  • Đối với đầu vào tiêu chuẩn, bạn chỉ có thể truyền các đối số bằng phần tử ScriptTarget của TargetEndpoint. Xem bài viết Cấu hình ScriptTarget nâng cao để biết thêm thông tin.
  • Đối với đầu ra tiêu chuẩn, bạn chỉ sử dụng được 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.
  • Các mô-đun phụ thuộc vào mã gốc không được hỗ trợ.
  • Các mô-đun phụ thuộc vào các tính năng của EcmaScript 6, chẳng hạn như Promise và Trình tạo, không được hỗ trợ.
  • Cờ thời gian chạy Node.js, chẳng hạn như "harmony-proxies" không được hỗ trợ.

Đặt các hạn chế kết nối IP trên Edge cho Đám mây riêng tư

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

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

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

Tìm hiểu về việc hỗ trợ các mô-đun http và https

Tất 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 gửi đế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ố "cổng" này là bắt buộc trong Node.js, nhưng Apigee Edge sẽ bỏ qua tham số này. Thay vào đó, proxy API nơi tập lệnh Node.js chạy sẽ chỉ định "máy chủ ảo" mà tập lệnh đó nghe và ứng dụng Node.js cũng sử dụng chính các máy chủ ảo đó, giống như mọi proxy khác của Apigee Edge.

Mỗi môi trường trong Apigee có ít nhất một máy chủ ảo. Máy chủ ảo sẽ xác định các chế độ cài đặt HTTP để kết nối với tổ chức Apigee. Tất cả proxy API trong một môi trường đều dùng chung một máy chủ ảo. Theo mặc định, có hai máy chủ ảo cho mỗi môi trường: defaultsecure. Để biết thêm thông tin, hãy xem phần Tải 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 được gửi đế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 gửi đến bằng HTTPS.

Xử lý các yêu cầu gửi đ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 để gửi yêu cầu ra ngoài như bất kỳ ứng dụng Node.js nào khác. Các mô-đun này hoạt động như mọi khi bên trong Node.js.

Tìm hiểu về tính năng hỗ trợ cho mô-đun tls

Apigee Edge hỗ trợ mô-đun Node.js tls. Mô-đun này sử dụng OpenSSL để cung cấp giao tiếp truyền phát được mã hoá 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ể sử dụng mô-đun tls để tạo kết nối an toàn cho các dịch vụ phụ trợ từ các ứng dụng Node.js chạy trên Edge.

Để tìm hiểu cách hoạt động của mô-đun tls trên Apigee Edge, bạn cần nắm được cách dùng virtual hosts 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 sẽ xác định các chế độ cài đặt HTTP để kết nối với tổ chức Apigee. Tất cả proxy API trong một môi trường đều có cùng máy chủ ảo. Theo mặc định, có hai máy chủ ảo cho mỗi môi trường: defaultsecure. Để biết thêm thông tin về máy chủ ảo, hãy xem phần Tải máy chủ ảoVòng đời phát triển API.

Bây giờ, hãy cùng xem cách Apigee Edge xử lý hoạt động 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 được gửi đế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 proxy API đượ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 proxy API đượ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ẽ thuộc 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, chứng chỉ SSL sẽ xác thực bình thường.

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

Bạn có thể thực hiện các yêu cầu gửi đi bằng mô-đun tls giống như cách bạn thường thực hiện 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 bên trong tập lệnh của bạn. Để 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 đó, hãy xem tài liệu về mô-đun Node.js tls.

Cấu hình ScriptTarget nâng cao

Trong định nghĩa <TargetEndpoint>, phần tử <ScriptTarget> lấy thêm các tham số không bắt buộc ngoài <ResourceURL>. Bạn cũng có thể chuyể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>