Juergen.Zimmermann@HS-Karlsruhe.de
Diese Datei ist in Markdown geschrieben und kann mit
<Strg><Shift>vin Visual Studio Code leicht gelesen werden.Näheres zu Markdown gibt es in einem Wiki
Nur in den ersten beiden Vorlesungswochen kann es Unterstützung bei Installationsproblemen geben.
-
Das Beispiel nicht in einem Pfad mit Leerzeichen installieren. Viele Javascript-Bibliotheken werden unter Linux entwickelt und dort benutzt man keine Leerzeichen in Pfaden. Ebenso würde ich das Beispiel nicht auf dem Desktop auspacken bzw. installieren.
-
Bei GitHub registrieren, falls man dort noch nicht registriert ist.
- Falls es das Unterverzeichnis
node_modulesNICHT gibt: Installation durch npm (Node Package Manager) in einer Powershell (s.u.), :- Die Installation der Software-Pakete erfolgt i.a. über NPM
und damit über den Port 80 (oder 443 bei https). Wenn
gitbenötigt wird, dann wirdsshaufgerufen und deshalb Port 22 benötigt. - Eine persönliche Firewall o.ä. kann diesen Port blockieren. Dann funktioniert die Installation natürlich nicht und man muss z.B. die eigene Firewall geeignet konfigurieren oder vorübergehend ausschalten.
- Der Port 22 ist am Hochschul-Proxy nicht freigeschaltet.
- Die Installation der Software-Pakete erfolgt i.a. über NPM
und damit über den Port 80 (oder 443 bei https). Wenn
npm i npm run mongo
npm run mongo stop npm run mongo import
npm run mongo exportBeim Importieren wird die Datei config\mongoimport\spiel.json verwendet.
Beim Importieren darf der DB-Browser Mongo Express (s.u.) nicht gestartet
sein.
Defaultwerte für MongoDB beibehalten zzgl. Authentifizierung:
Server: localhost
Port: 27017
Authentication: admin/pAlternativ könnte man auch Mongo Express verwenden, was allerdings immer wieder Probleme macht, wenn MongoDB über TLS angesprochen werden muss:
npm run mongo mongoexpressBei Mongo Express wird ein Webserver gestartet. Über einen Webbrowser kann
dann mit der URI https://localhost:8081/db/hskadb/spiel auf die Collection
spiel in der Datenbank hska zugegriffen werden.
npm run tsc- Zuerst die Codequalität mit tslint prüfen und dann
- .ts-Dateien durch tsc in das Verzeichnis
distübersetzen
Durch nodemon (= Node Monitor) wird der Appserver so gestartet, dass er JavaScript-Dateien im laufenden Betrieb nachlädt, wenn sie später aktualisiert werden, weil z.B. eine TypeScript-Datei neu übersetzt wird. Beim Starten des Appservers wird mit mongoose auf MongoDB zugegriffen.
npm startVon Zeit zu Zeit hängt sich nodemon auf und muss dann halt neu gestartet werden.
Falls nodemon nicht vernünftig funktioniert, kann man auch den Appserver direkt starten (s.u.) und muss diesen dann bei jeder Änderung neu starten.
npm run serveDadurch wird der eigene Node-basierte Server gestartet. Das ist aber nach jeder Übersetzung neu erforderlich.
$env:MOCK_DB = "true"
npm startDadurch wird der eigene Node-basierte Server gestartet, ohne dass auf die Datenbank zugegriffen wird. Stattdessen wird mit Mock-Objekten gearbeitet.
https://localhost:8443/apiBeispielhafte Eingaben sind in der Date config\graphql\beispiele.txt.
- Der MongoDB-Server muss laufen
- Der Appserver darf nicht laufen
npm tStatt t kann man auch test ausschreiben.
Visual Studio Code kann man kostenfrei herunterladen.
Tipps:
<Strg>kc: Markierte Zeilen werden auskommentiert<Strg>ku: Bei markierten Zeilen wird der Kommentar entfernt<Strg><Shift>p:Terminal: Neues integriertes Terminal erstellen
Für WebStorm gibt es bei JetBrains auf Initiative von Jürgen Zimmermann eine Studenten-Lizenz, die für 1 Jahr gültig ist.
Für Visual Studio Code ist u.a. die Erweiterung REST Client aus dem Marketplace empfehlenswert.
Aus dem Chrome Webstore installieren.
Aus dem Chrome Webstore installieren.
In Anlehnung an die Guidelines von TypeScript
- "Feature Filenames", z.B. spiel.service.ts
- Klassennamen und Enums mit PascalCase,
- Attribute und Funktionen mit camelCase,
- private Properties nicht mit vorangestelltem _,
- Interfaces nicht mit vorangestelltem I
- Barrel für häufige Imports, z.B.
shared\index.tserstellen:export * from './bar'; export * from './foo';
- einfaches Importieren:
import { Bar, Foo } from 'shared';
- [...].forEach() und [...].filter() statt for-Schleife
- Arrow-Functions statt anonyme Funktionen
- undefined verwenden, nicht: null
- Geschweifte Klammern bei if-Anweisungen
- Maximale Dateigröße: 400 Zeilen
- Maximale Funktionsgröße: 75 Zeilen
Ein JSON-Objekt kann eine rekursive Datenstruktur haben, wie z.B.:
const obj: any = {
id: 4711,
foo: {
bar: 'a string',
rekursiv: obj,
},
};Bei einer solchen rekursiven Datenstruktur gibt es beim Aufruf von
JSON.stringify(obj) eine Endlosrekursion und damit einen Stackoverflow.
Bei den Request- und Response-Objekten von Express gibt es rekursive
Datenstrukturen.
Alternative 1: Mit der Function stringify von fast-safe-stringify kann man
dennoch ein Objekt mit einer rekursiven Datenstruktur in einen String
konvertieren:
import stringify from 'fast-safe-stringify'
...
stringify(obj) // statt JSON.stringify(obj)Alternative 2: Mit der Function inspect von Node.js kann man dennoch ein
Objekt mit einer rekursiven Datenstruktur in einen String konvertieren:
import {inspect} from 'util' // util ist Bestandteil von Node.js
...
inspect(obj) // statt JSON.stringify(obj)- Das Debug Icon in der Activity Bar anklicken
- Den Tab Terminal auswählen, dort in das Projektverzeichnis wechseln und
dann
nodemonals (Remote) Server starten:
cd <Projektverzeichnis>
nodemon -Vnodemon ruft dann die JS-Datei auf, die in package.json bei der Property
main steht, d.h. dist\index.js.
Nun kann man Breakpoints setzen, indem man bei einer geöffneten .ts-Datei links von der Zeilennummer klickt. Beim Übersetzen hat nämlich der TypeScript-Compiler Dateien für das Source Mapping generiert.
Jetzt muss man nur noch links oben bei "Debugging starten" auf den linken grünen Button klicken (siehe auch .vscode\launch.json).
Am Ende nicht vergessen, im Terminal den Server mit <Strg>C zu beenden!