Obsługa Edge dla modułów Node.js

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

Jaką wersję Node.js obsługuje Apigee Edge?

Edge obsługuje obecnie Node.js w wersji 0.10.32.

Które standardowe moduły Node.js są obsługiwane w Edge?

W tabeli poniżej znajdziesz informacje o tym, które standardowe moduły Node.js są dostępne w Edge. W niektórych przypadkach dołączone moduły są obsługiwane tylko częściowo. Są to moduły wbudowane w Node.js.

Moduł Stan Uwagi
assert Obsługiwane
buffer Obsługiwane
child_process Z ograniczonym dostępem Jeśli spróbujesz utworzyć podproces, zostanie zgłoszony wyjątek. Jednak w przypadku tworzenia podskryptów obsługiwana jest funkcja „fork”.
cluster Wyłączono Metoda cluster.isMaster zawsze zwraca wartość „true”, a inne metody nie są zaimplementowane. Do każdego procesora wiadomości Edge wdrażana jest jedna kopia każdego skryptu Node.js.
crypto Obsługiwane
dns Obsługiwane
domain Obsługiwane
dgram Z ograniczonym dostępem Aplikacje Node.js w środowisku Apigee nie będą mogły uzyskiwać dostępu do usług w internecie za pomocą protokołu UDP ze względu na naszą architekturę sieciową.
events Obsługiwane
fs Z ograniczonym dostępem Dostęp do systemu plików jest ograniczony do katalogu, w którym uruchomiono skrypt, czyli do katalogu /resources/node. Skrypty Node.js mogą odczytywać i zapisywać pliki w tym katalogu, np. jako tymczasowy obszar roboczy, ale nie ma gwarancji, jak długo pliki będą przechowywane.
http Obsługiwane Wirtualny host i ścieżka dla żądań przychodzących są określone w serwerze proxy interfejsu API, a nie w module HTTP. Więcej informacji znajdziesz w sekcji „Understanding support for the http and https modules” (Zrozumienie obsługi modułów http i https).
https Obsługiwane Tworzenie serwera „https” działa tak samo jak tworzenie serwera „http”. Więcej informacji znajdziesz w sekcji „Understanding support for the http and https modules” (Zrozumienie obsługi modułów http i https).
module Obsługiwane
net Z ograniczonym dostępem Próby nasłuchiwania przychodzących połączeń TCP będą generować wyjątek.
path Obsługiwane
module Obsługiwane
process Częściowa obsługa Funkcja manipulowania identyfikatorem użytkownika, członkostwem w grupie i katalogiem roboczym nie jest obsługiwana.
punycode Obsługiwane
querystring Obsługiwane
readline Wyłączono W przypadku skryptów działających na platformie Apigee Edge nie ma standardowego wejścia.
repl Wyłączono W przypadku skryptów działających na platformie Apigee Edge nie ma standardowego wejścia.
module Uwzględniono
STDIO Obsługiwane

Standardowe dane wyjściowe i błędy są kierowane do pliku dziennika w infrastrukturze Apigee Edge. Te logi możesz wyświetlić, klikając przycisk Logi Node.js w interfejsie zarządzania Apigee Edge dla Twojego serwera proxy interfejsu API.

W przypadku skryptów działających na platformie Apigee Edge nie ma standardowego wejścia. Możesz jednak przekazywać argumenty za pomocą elementu ScriptTarget w obiekcie TargetEndpoint. Więcej informacji znajdziesz w sekcji Zaawansowana konfiguracja ScriptTarget.

stream Obsługiwane
string_decoder Obsługiwane
timers Uwzględniono
tls Obsługiwane Parametry TLS działają w zasadzie tak samo jak w zwykłym Node.js. Szczegółowe informacje znajdziesz w artykule Using the TLS (SSL) Node.js module on Apigee Edge (Używanie modułu TLS (SSL) Node.js w Apigee Edge).
tty Wyłączono W przypadku skryptów działających na platformie Apigee Edge nie ma standardowego wejścia.
url Obsługiwane
util Obsługiwane
vm Obsługiwane
zlib Obsługiwane

Dodatkowe obsługiwane moduły

W tej sekcji znajdziesz listę dodatkowych modułów, które nie są obsługiwane w standardowym Node.js, ale są obsługiwane przez Trireme i Trireme działające na Apigee Edge. Trireme to kontener Node.js typu open source, który działa na platformie Apigee Edge. Jest on przeznaczony do uruchamiania skryptów Node.js w maszynie wirtualnej Java (JVM). Wszystkie te moduły są dostępne w NPM.

Moduł Opis
apigee-access Umożliwia aplikacjom Node.js działającym na platformie Apigee Edge dostęp do funkcji specyficznych dla Apigee. Za pomocą tego modułu możesz uzyskiwać dostęp do zmiennych przepływu i je modyfikować, pobierać dane z bezpiecznego magazynu oraz korzystać z usług pamięci podręcznej Edge, limitów i OAuth. Zobacz też Korzystanie z modułu apigee-access.
trireme-support Umożliwia aplikacjom Node.js korzystanie z funkcji specyficznych dla Trireme. Obecnie obsługiwana jest tylko jedna funkcja – wczytywanie modułów Node.js utworzonych w języku Java. Uwaga: funkcja loadJars nie jest obsługiwana w Edge Cloud.
trireme-xslt Przedstawia abstrakcję przetwarzania XLST. Został on zaprojektowany specjalnie na potrzeby platformy Trireme, aby umożliwić wydajne przetwarzanie XSLT, gdy aplikacje Node.js są uruchamiane w środowisku Java.
trireme-jdbc Umożliwia dostęp do JDBC z Node.js. Uwaga: nie jest obsługiwane w Edge Cloud. W przypadku Edge Private Cloud możesz umieścić pliki JAR JDPC w ścieżce klasy i używać tego modułu.

Obsługa powszechnie używanych modułów Node.js

Ograniczenia dotyczące skryptów Node.js

Pamiętaj jednak, że Edge nakłada pewne ograniczenia na skrypty Node.js, takie jak:

  • Aplikacje Node.js w środowisku Apigee Edge nie mogą uzyskiwać dostępu do usług w internecie za pomocą protokołu UDP ze względu na architekturę sieci brzegowej Edge.
  • Dostęp do systemu plików jest ograniczony do katalogu, w którym uruchomiono skrypt Node.js, czyli do katalogu /resources/node. Skrypty Node.js mogą odczytywać i zapisywać pliki w tym katalogu, np. jako tymczasowy obszar roboczy, ale nie ma gwarancji, jak długo pliki będą przechowywane.
  • Próby nasłuchiwania przychodzących połączeń TCP generują wyjątek.
  • Funkcje manipulowania identyfikatorem użytkownika, członkostwem w grupie i katalogiem roboczym nie są obsługiwane.
  • W przypadku standardowych danych wejściowych możesz przekazywać argumenty tylko za pomocą elementu ScriptTarget w obiekcie TargetEndpoint. Więcej informacji znajdziesz w sekcji Zaawansowana konfiguracja elementu ScriptTarget.
  • W przypadku standardowych danych wyjściowych możesz używać tylko przycisku Dzienniki Node.js w interfejsie zarządzania Edge dla serwera proxy. Możesz też użyć polecenia „apigeetool getlogs”. Więcej informacji znajdziesz w artykule Wdrażanie samodzielnej aplikacji Node.js.
  • Moduły zależne od kodu natywnego nie są obsługiwane.
  • Moduły, które zależą od funkcji EcmaScript 6, takich jak obietnice i generatory, nie są obsługiwane.
  • Flagi środowiska wykonawczego Node.js, takie jak „harmony-proxies”, nie są obsługiwane.

Ustawianie ograniczeń połączenia po IP w Edge for Private Cloud

Edge for Private Cloud może ograniczyć dostęp kodu Node.js do adresów IP zaczynających się od „10.". „192.168” i localhost. Jeśli spróbujesz uzyskać dostęp do tych adresów IP, zobaczysz błąd w formie:

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

Możesz zmodyfikować te ograniczenia, ustawiając właściwość conf_nodejs_connect.ranges.denied w pliku message-processors.properties dla każdego procesora komunikatów. Domyślnie ta właściwość ma wartość:

  • Edge 4.17.05 i starsze: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge w wersji 4.17.09 i nowszej: conf_nodejs_connect.ranges.denied= (co oznacza brak ograniczeń)

Aby ustawić tę właściwość:

  1. Otwórz plik message-processor.properties w edytorze. Jeśli plik nie istnieje, utwórz go:
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. Ustaw właściwość zgodnie z potrzebami. Aby na przykład odmówić dostępu tylko do localhost:
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. Zapisz zmiany.
  4. Sprawdź, czy plik właściwości należy do użytkownika „apigee”:
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. Uruchom ponownie procesor komunikatów:
    > /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Informacje o obsłudze modułów http i https

Wszystkie aplikacje Node.js działające w Apigee Edge muszą używać modułu http lub https do nasłuchiwania przychodzących żądań. Jeśli wdrożysz skrypt, który nie nasłuchuje przychodzących żądań, po prostu się wykona i zakończy działanie.

Metoda listen modułów http i https w Node.js przyjmuje numer portu jako parametr. Na przykład:

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

Argument „port” jest wymagany w Node.js, ale Apigee Edge go ignoruje. Zamiast tego proxy interfejsu API, w którym działa skrypt Node.js, określa „host wirtualny”, na którym nasłuchuje, a aplikacja Node.js używa tych samych hostów wirtualnych, tak jak każdy inny proxy Apigee Edge.

Każde środowisko w Apigee ma co najmniej 1 hosta wirtualnego. Host wirtualny określa ustawienia HTTP połączenia z organizacją Apigee. Wszystkie proxy interfejsu API w środowisku współdzielą te same hosty wirtualne. Domyślnie w każdym środowisku dostępne są 2 hosty wirtualne: defaultsecure. Więcej informacji znajdziesz w sekcjach Pobieranie hosta wirtualnegoCykl życia tworzenia interfejsu API.

Polecenie apigeetool deploynodeapp generuje otokę proxy Apigee Edge wokół aplikacji Node.js. Po wdrożeniu aplikacja Node.js nasłuchuje na domyślnym hoście wirtualnym zdefiniowanym dla środowiska. Adres URL aplikacji Node.js będzie zawsze miał postać http://{org_name}-{env_name}.apigee.net.

Obsługa przychodzących żądań

Podobnie jak w przypadku innych aplikacji Apigee Edge, jeśli aplikacja proxy jest skonfigurowana do nasłuchiwania na securewirtualnym hoście, będzie akceptować przychodzące żądania za pomocą protokołu HTTPS.

Obsługa wychodzących żądań

Oprócz odbierania ruchu przychodzącego aplikacje Node.js w Apigee Edge mogą używać modułów httphttps do wysyłania żądań wychodzących, tak jak każda inna aplikacja Node.js. Te moduły działają tak samo jak w Node.js.

Informacje o obsłudze modułu tls

Apigee Edge obsługuje moduł TLS Node.js. Ten moduł używa OpenSSL do zapewnienia szyfrowanej komunikacji strumieniowej za pomocą protokołów Transport Layer Security (TLS) lub Secure Socket Layer (SSL). Za pomocą modułu tls możesz tworzyć bezpieczne połączenia z usługami backendu z aplikacji Node.js działających na platformie Edge.

Aby zrozumieć, jak moduł tls działa w Apigee Edge, musisz wiedzieć, jak w Apigee Edge używane są virtual hosts. Każde środowisko w Apigee ma co najmniej 1 hosta wirtualnego. Wirtualny host określa ustawienia HTTP połączenia z organizacją Apigee. Wszystkie proxy interfejsu API w środowisku współdzielą te same hosty wirtualne. Domyślnie w każdym środowisku dostępne są 2 wirtualne hosty: defaultsecure. Więcej informacji o wirtualnych hostach znajdziesz w artykułach Pobieranie wirtualnego hostaCykl życia tworzenia interfejsu API.

Teraz zobaczmy, jak Apigee Edge obsługuje komunikację TLS (SSL) w przypadku przychodzących i wychodzących żądań w aplikacjach Node.js:

Obsługa przychodzących żądań

W zależności od konfiguracji hostów wirtualnych w organizacji Edge udostępnia te opcje:

  • Jeśli proxy interfejsu API jest skonfigurowany do nasłuchiwania na hoście wirtualnym default, akceptuje żądania przez HTTP.
  • Jeśli serwer proxy interfejsu API jest skonfigurowany do nasłuchiwania na hoście wirtualnym secure, akceptuje żądania przez HTTPS. Adres URL będzie należeć do domeny apigee.net, a używany będzie certyfikat SSL typu Wildcard dla domeny *.apigee.net. Dopóki aplikacje wysyłają żądania do domeny apigee.net, certyfikat SSL będzie weryfikowany w normalny sposób.

Obsługa wychodzących żądań

Możesz wysyłać żądania wychodzące za pomocą modułu tls w taki sam sposób, jak zwykle w Node.js. Musisz dodać klucze i certyfikaty po stronie klienta (pliki .pem) do katalogu resources/node i wczytać je w skrypcie. Informacje o korzystaniu z modułu tls i jego metod znajdziesz w dokumentacji modułu tls Node.js.

Zaawansowana konfiguracja elementu ScriptTarget

W definicji <TargetEndpoint> element <ScriptTarget> przyjmuje dodatkowe parametry opcjonalne oprócz <ResourceURL>. Możesz też przekazywać argumenty wiersza poleceń i zmienne środowiskowe do skryptu Node.js za pomocą parametrów <EnvironmentVariables> i <Arguments>:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>