Blogkategorie: "Allgemein" der Internetagentur aceArt GmbH Stuttgart

In dieser Kategorie befinden sich Blogbeiträge, die keine eigene Kategorie angehört. Stöbert in unseren Blog-Archiv rum. Vielleicht entdeckt ihr den ein oder anderen Interessanten Artikel über Neuigkeiten, Technologien etc. den ihr noch nicht kennt.

Unser erster Node.js Server in unter 30 Minuten

Unser erster Node.js Server in unter 30 Minuten

Node.js kann mit seiner zu bietenden Flexibilität und recht freien „Syntax“ (missing strict guidlines?!) ziemlich überwältigend für Anfänger wirken.

 

Deshalb soll dieses Tutorial eine schnelle und einfache Einführung in Node.js, dem Express Framework und der NoSQL Datenbank (MongoDB) bieten.

Unser Fokus wird dabei auf der Erstellung Grundlegender REST Endpunkte sowie simple Datenbank Interkationen liegen. Diese legen den Grundstein/Fundament auf denen man aufbauen kann.

Wichtig hierbei ist: Dass du Grundkenntnisse über REST, CRUD und Javascript bzw. ECMAScript besitzt.

 

Hierfür werden wir ein Backend schreiben, welches Bücher verwalten kann.

Projekt Setup

Wenn du noch nicht Node installiert hast, schau dir das an.

Leg einen neuen Ordner für unser Projekt an und führe über die Bash auf diesen Ordner diesen Befehl aus:

npm init

Wenn das erledigt ist, solltest du eine package.json in diesem Ordner besitzen. Das bedeutet, dass wir nun die Möglichkeit haben unserem Projekt via NPM, Module hinzuzufügen.

Dazu führen wir diesen Befehl aus:

npm i express mongoose

Hiermit haben wir uns das Express Framework und Mongoose Module unserem Projekt hinzugefügt.

Express ist ein Framework, dass uns ungemein dabei hilft schnell ein Backend auf die Beine zu stellen.

Mongoose hingegen baut auf den MongoDB Treiber auf um Modelbasiert Datenbankanfragen zu stellen.

 

Zusätzlich empfehle ich nodemon Global zu installieren. Hierdurch lässt sich nodemon nicht nur in einem Projekt verwenden sondern auch in zukünftigen.

npm i -g nodemon

Nodemon überwacht unser Projekt auf Änderungen und startet dieses automatisch neu, ohne jegliches zu tun.

So in etwa sollte dann deine package.json aussehen:

Package.json

 

 

Unser Server

Zunächst einmal binden wir alle benötigten Module in unsere index.js ein.

Node.js Express imports

Als nächstes benötigen wir noch eine Instanz von Express und weisen dieser einen Port zu auf dem der Server HTTP Anfragen annimmt.

Node.js Express Port listening

Wenn wir nun nodemon ausführen bzw. npm run dev oder node index.js, können wir in der Konsole sehen, dass der Server auf unserem gewünschten Port live gegangen ist.

Nodemon Server gestartet

Können tut er leider noch nichts, deshalb lass uns nun ein paar Endpunkte hinzufügen.

 

 

 

 

CRUD Endpunkte

Jetzt sind wir so weit Endpunkte unserem Server hinzuzufügen. Wir werden zum Schluss die Möglichkeit haben Bücher hinzuzufügen, zu entfernen, zu lesen und Ihre Daten up zu daten.

Hiermit soll ein ein Grundverständnis der Routing Struktur von Node vermittelt werden.

Um unsere Endpunkte bzw. API´s zu testen, werden wir eine Applikation verwenden die sich Postman nennt. Mithilfe von Postman lässt sich schnell und einfach verschiedenste HTTP Request an einen Server zu schicken.

Hier geht es zu Postman

 

Projektstruktur

Auch wenn wir nur eine kleine Applikation schreiben sollten wir lernen eine gewisse Übersicht zu bewahren. Deshalb werden wir unser Projekt so strukturieren, dass unsere Routen (Endpunkte) und Models jeweils in einem eigenen Verzeichnis liegen.

Node.js Projektstruktur

Das C in CRUD

Lass uns nun eine Create Route erstellen um ein Buch anlegen zu klönnen.

Dazu legen wir eine book.js unter routes an.

So in etwa:

Node.js Express Post Route Hello World

Wir machen nichts anderes als Express zu sagen, dass wir unter der URI /book einen POST Request entgegen nehmen möchten und geben bei einer Erfolgreichen Anfrage ein Request (req) Objekt (welche Daten vom Client enthält) so wie ein Response Objekt(res) in die Callback Funktion. Wir verwenden das Response Objekt um einen HTTP Status Code 200, welcher so viel bedeutet wie alles OK, und ein kleines „Hello World“ zurück geben zu können.

Als letztes müssen wir noch unsere Route unserer Express instanz bekannt machen. Deshalb exportieren wir unser api Objekt und binden diese so ein:

Node.js Express Route der Express Instanz kenntlich machen

Lass uns diese nun mithilfe Postman testen.

Postman Hello World Post Request

Cool! Wir haben unsere erste Route erstellt.

Als nächstes lass uns ein paar Parameter mitgeben und diese in unserer API verarbeiten und in schließlich in unserer Datenbank anlegen

 

 

 

 

 

Request Parameter

Versuchen wir einfach mal in Postman unter x-www-form-urlencoded im Body ein paar Key-Value´s mitgeben.

Durch den Content-Type x-www-form-urlencoded ist es uns möglich die mitgelieferten Daten zu auf unserem Server zu verarbeiten.

(Bild Postman Key-Value)

Postman Node.js Buch Post Request mit Body

In unserem Server wollen wir erstmal den mitgelieferten Body ausgegeben haben wollen:

Form Data Request ohne Bodyparser liefert undefined

Autsch! wir bekommen nur ein ‚undefined‘ zurück…

Das liegt daran, dass Express von Haus aus keine URL encoded Forms verarbeiten kann.

Deshalb müssen wir noch den bodyParser in unserer index.js mit einbinden.

Aber zuerst einmal „npm i body-parser“ in die Bash

Bodyparser als Middleware in Express einbinden

Jetzt sollten wir, wenn wir noch einmal einen Request an den Server schicken, unsere mitgelieferten Daten ausgegeben bekommen.

Node.js Post Request Body Rückgabe

Nun zur Datenbank

Ich gehe davon aus, dass die MongoDB bereits installiert ist.

Dazu legen wir uns einen config Ordner an und legen unsere Datenbank URL in einer config.js ab.

In dieser können wir auch unseren Port für den Server hinterlegen.

Node.js config.js

In unserer index.js müssen wir nun mithilfe mongoose die Datenbank verbindung aufbauen.

Das würde so aussehen:

Verbindung mit der MongoDB via mongoose

 

 

Datenbank

Datenbank Model

Mit Mongoose können wir angeben wie unser Buch Schema in unserer Datenbank aussehen soll.

Mongoose Buch Schema

Um schließlich unsere Daten in die Datenbank ablegen zu können. Erstellen wir ein Objekt dieses Mongoose Buch Models und können darauf die speicher Funktion aufrufen.

Node.js Express Post Model speichern

Zusätzlich übergeben wir der .save Funktion einen weiteren Parameter, den wir loggen. Dadurch können wir sehen wie unser Buch Objekt in der Datenbank abgelegt worden ist.

MongoDB Datenbank Ausgabe bei Post Request

 

Die anderen CRUD Operatoren

Nun möchten wir ein Buch aus unserer Datenbank lesen bzw. zurückliefern. Dazu bietet sich die findById() Methode von Mongoose an.

Node.js Express getByID

Dazu nehmen wir die einzigartige ObjectId, welche jeder Datensatz in MongoDB erhält

Postman Get By Id

und wenn wir alle Bücher zurückliefern möchten übergeben wir nichts:

Node.js get All from DB

wesentlich unterscheiden tun sich die Methoden zum updaten und löschen von Büchern nicht von den anderen

Node.js Delete and Update Route

 

 

Fertig!

Wir haben nun eine Funktionierenden Node Server welcher die wesentlichen CRUD Methoden unterstützt.

Dieses Tutorial war dazu da, um dir Express, Node und MongoDB näher zu bringen. Diese App die wir gemeinsam erstellt haben, kannst du nun als Sprungbrett für komplexere Applikationen verwenden.

Danke für´s lesen 🙂

 

Vagrant – It smells like Linux

Vagrant – It smells like Linux

Frei nach dem Motto „it’s better to burn out than to fade away“ habe ich mir die vergangenen Nächte mit der Suche nach neuen Technologien im Bereich der lokalen Webentwicklung um die Ohren geschlagen. Nachdem ich XAMPP schon seit Längerem die Treue gekündigt habe und auch AMPPS – nach einem kurzen Aufflackern der Hoffnung, endlich ein geeignetes Tool gefunden zu haben – enttäuschte, durchstöberte ich erneut das Netz auf der Suche nach der eierlegenden Wollmilchsau.

 

 

Flexibilität bei der lokalen Webentwicklung

Meine Anforderungen an die lokale Entwicklung sind dabei vor Allem Flexibilität des Servers, da wir es mit unterschiedlichsten Technologien zu tun haben. (Sowohl im Backend als auch im Frontend) Ich möchte ohne großen Aufwand einen Service starten können, welcher mir die Webseite auf eine lokale IP ausliefert. Außerdem will ich die Möglichkeit haben, die einzelnen Services (PHP, NPM, NodeJS, bower, gulp, mysql, mongodb, captistrano, composer, …) getrennt pro Projekt updaten zu können. Ich hätte gerne ein Abbild der Konfiguration, sodass andere Programmierer, welche am Projekt mitarbeiten wollen, die gleichen Konfigurationen auschecken und installieren können, ohne den ganzen Stack immer installieren zu müssen. Da selbst das Ändern der PHP-Version bei XAMPP zum Problem wird (von anderen Technologien und geteilter Konfiguration möchte ich gar nicht erst anfangen) ist XAMPP auf Dauer keine geeignete Lösung für uns. AMPPS und auch andere LAMP-Stack Applikationen für Windows haben hier die selben Schwächen. Bei AMPPS kann man zwar die PHP-Version per Klick austauschen, jedoch lief es insgesamt nie stabil auf meinem Windows 10. Nach einem (Creators) Update meines Windows fährt AMPPS nicht mehr hoch, zudem wurde bereits mehrfach die Datenbank zerstört – das ist mir bei XAMPP bisher nicht passiert.

Alles in Allem habe ich genug von dem LAMP Stack unter Windows und begebe mich auf zu neuen Ufern.

 

Vagrant als XAMPP-Ersatz?

Als Landstreicher durch neue Täler – erste Schritte

Nachdem ich vagrant (Deutsch: Landstreicher) auf der offiziellen Seite heruntergeladen und installiert habe, habe ich mich zunächst für die VirtualBox (Standard) als Provider entschieden. Installiert – empfohlene Konfigurationen befolgt – Bluescreen. Fängt ja gut an. Nach kurzen Recherchen und Experimenten wurde VirtualBox als Übeltäter festgestellt, und aus meiner Konfiguration verbannt. Vagrant ist hier sehr modular aufgebaut und arbeitet mit diversen externen Virtualisierungsumgebungen zusammen. Momentan werden neben VirtualBox weitere Systeme wie Hyper-V, VMware, Docker oder Libvirt unterstützt.

 

Einrichten von Hyper-V

Nachdem ich die VirtualBox aus der Konfiguration entfernte, musste ein anderer Provider her, um vagrant Nährboden für seine virtuelle Umgebung zu liefern. Da mein Rechner mit Hyper-V ausgeliefert wurde, entschied ich mich dafür, der Microsoft-Technologie eine Chance zu geben.

Hyper-V kann relativ einfach über die PowerShell (mit Admin-Rechten) über folgenden Befehl aktiviert werden:
Enable-WindowsOptionalFeature -Online -FeatureName:Microsoft-Hyper-V -All

Starten von vagrant

Über den Befehl „vagrant init“ lässt sich vagrant in einem Projektordner eurer Wahl installieren. Vagrant legt dabei ein Vagrantfile in eurem Projektordner an. Dort kann man zunächst eine VM eintragen. In meinem Fall nutze ich die „generic/ubuntu1604“, eine ubuntu 16.04 LTS Distribution mit Hyper-V Unterstützung. Über „vagrant up“ startet der Server und ihr solltet über den Hyper-V-Manager eure Maschine sehen können.

Synced Files

Um in eurer Linuxumgebung auf die Dateien eures Projekts zugreifen zu können, muss ein weiterer Eintrag in eurem Vagrant-File hinzugefügt werden:
config.vm.synced_folder „.“, „/vagrant“, type: „smb“

Verflucht seien die Symlinks

In meinem Beispielprojekt werden einige Ordner mit Symlinks referenziert. Eine tolle Sache. So allgemein. Aber nicht für Vagrant. Aber es gibt eine Möglichkeit, Links trotzdem verwenden zu können. Symlinks dürfen dabei nur relativ, und nur mit dem Windowsbefehl „mklink“ angelegt werden. Das Verwenden der ln über beispielsweise git bash unter Windows führt hier zu Fehlern.

Nachdem nun auch diese Hürde genommen wurde, kann man sich über „vagrant ssh“  auf die Ubuntu-Instanz verbinden. Hier eröffnet sich nun die Linux Welt. Traumhaft. Ich werfe wild mit Linux Befehlen um mich – installiere mysql, php und apache und rufe über die IP der Hyper-V Instanz eine von mir angelegte Beispielseite auf – Es funktioniert!

Gemeinsame Konfiguration

Die Virtuelle Umgebung steht und das Konzept leuchtet ein. Aber wie können nun andere Programmierer ohne große Probleme die selbe Virtualisierung erstellen, ohne meine Virtualisierung klonen zu müssen? Über den Eintrag „config.vm.provision :shell, path: „vagrant/vagrant_install.sh“ definieren wir nun ein Script, welches für die Initialisierung der Maschine bereitgestellt wird. Sollte man die Maschine neu bauen, wird dieses Script automatisch aufgerufen und installiert alle wichtigen Applikationen und beschreibt die Konfigurationen.

Vagrant mit Typo3 – die perfekte Mischung.

Beispielsweise wurde folgendes Script für die Initialisierung eines Typo3-Projektes erstellt:

#!/usr/bin/env bash
#
Update () {
echo „– Update packages –“
sudo apt-get update
sudo apt-get upgrade
}
Update

echo „– Prepare configuration for MySQL –“
sudo debconf-set-selections <<< „mysql-server mysql-server/root_password password XYZ“
sudo debconf-set-selections <<< „mysql-server mysql-server/root_password_again password XYZ“
echo „– Install tools and helpers –“
sudo apt-get install -y –force-yes curl

 

echo „– Install mysql and php with its packages –“
sudo apt-get install -y –force-yes apache2 mysql-server
sudo apt-get install -y –force-yes apache2 php libapache2-mod-php php-mcrypt php-mysql php-cli php-curl
sudo apt-get install -y –force-yes php7.0-gd php-xml php-zip
Update

 

############################### CONFIG APACHE #####################################

echo „– Configure PHP &Apache –“
# set errors to true
sed -i „s/error_reporting = .*/error_reporting = E_ALL/“ /etc/php/7.0/apache2/php.ini
sed -i „s/display_errors = .*/display_errors = On/“ /etc/php/7.0/apache2/php.ini
# set apache user to vagrant
sed -i „s/APACHE_RUN_USER=.*/APACHE_RUN_USER=vagrant/“ /etc/apache2/envvars
sed -i „s/APACHE_RUN_GROUP=.*/APACHE_RUN_GROUP=vagrant/“ /etc/apache2/envvars
sudo a2enmod rewrite

 

echo „– Creating virtual hosts –“
sudo rm /etc/apache2/sites-available/default.conf
sudo touch /etc/apache2/sites-available/default.conf
cat << EOF | sudo tee -a /etc/apache2/sites-available/default.conf
<Directory „/var/www/“>
AllowOverride All
</Directory>

<VirtualHost *:2503>

DocumentRoot /var/www/typo3/web
ServerName typo3.dev
</VirtualHost>

<VirtualHost *:2504>
DocumentRoot /var/www/adminer
</VirtualHost>

<VirtualHost *:2505>
DocumentRoot /var/www/typo3/simplesamlphp/www
Alias /simplesaml /var/www/typo3/simplesamlphp/www
<Directory />

Require all granted
</Directory>
</VirtualHost>

EOF

echo „– Add Port 2503 to the ports of apache –“
echo „Listen 2503“ | sudo tee -a /etc/apache2/ports.conf
echo „Listen 2504“ | sudo tee -a /etc/apache2/ports.conf
echo „Listen 2505“ | sudo tee -a /etc/apache2/ports.conf

############################## install adminer #################################

mkdir -p /var/www/adminer
sudo wget „http://www.adminer.org/latest.php“ -O /var/www/adminer/index.php

 

echo „– Edit dir.con (Add index.php) –“
sudo rm /etc/apache2/mods-enabled/dir.conf
cat << EOF | sudo tee -a /etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
EOF

 

############################### CONFIG MYSQL #####################################

DB_PASSWORD=“123″
DB_USERNAME=“test“
DB_DATABASE=“test“

mysql -uroot -pXYZ -e „CREATE DATABASE ${DB_DATABASE} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;“
mysql -uroot -pXYZ -e „CREATE USER ${DB_USERNAME}@localhost IDENTIFIED BY ‚${DB_PASSWORD}‘;“
mysql -uroot -pXYZ -e „GRANT ALL PRIVILEGES ON ${DB_DATABASE}.* TO ‚${DB_USERNAME}’@’localhost‘;“
mysql -uroot -pXYZ -e „FLUSH PRIVILEGES;“

 

mysql -uroot -pXYZ $DB_DATABASE < /var/www/typo3/vagrant/init.sql
# todo update passwords in database from envfile
sudo a2ensite default.conf
echo „– Restart Apache –“
sudo /etc/init.d/apache2 restart

Das Script installiert alle benötigten Pakete, updatet den Server, erstellt die vhost-Konfigurationen, initialisiert die Datenbank, öffnet die Ports, installiert ein Adminer (https://www.adminer.org/de/) und importiert eine Datenbank.

Das Script ist natürlich noch ausbaufähig, und soll hier nur als Beispiel dienen.

 

Erfahrung nach einigen Einsätzen

Nachdem ich vagrant nun bei 3 verschiedenen Systemen im Einsatz habe, kann ich das System nur empfehlen! Es übertrifft mit der Konfigurationsmöglichkeit jeden LAMP Stack; und durch das Verbinden auf die VM per SSH können ganz einfach alle möglichen Applikationen hinzugefügt werden.

 

 

Jahresausflug aceArt 2017

Jahresausflug aceArt 2017

Dieses Jahr hieß es “Schiff Ahoi!” beim jährlichen Ausflug der Internetagentur aceArt GmbH aus Stuttgart. Am 20. September brach die Firma auf nach Vinkeeven (Niederlande) um für 4 Tage Grachten, Flüsse und Binnenmeere unsicher zu machen! Mit an Bord waren die beiden Kapitäne Philipp und Florian sowie die Matrosen Martin, Janna und Cedric. Frisch angeheuert haben unsere Neuzugänge Nils, Peter und Simon.
Nach einer Nacht an Bord am Mittwoch und einer kurzen Einweisung am Donnerstag Morgen begann die Kaperfahrt mit dem ersten Ziel Utrecht. Bei der Einweisung wurden wir nicht belogen als es hieß: „Bei manchen Brücken müsst ihr die Köpfe einziehen!“, denn schon nach wenigen Minuten Fahrt schallte das Kommando „Matrosen an Deck, klarmachen zum Schleusenmanöver und Köpfe einziehen!“ von der Brücke, denn der Hafen lies sich nur durch eine spannende Kombination von viel zu tiefer Brücken und enger Schleusen verlassen.
Nach einer recht enspannten Fahrt über kleine Flüsse und große Schifffahrtskanäle erreichte die Crew gegen Mittag Utrecht. Hier konnten sich vorallem Kapitän Florian und Matrose Peter als gewiefte Seebären beweisen, da Utrecht mehr aus Brücken und Tunneln besteht, als aus allem anderen. Mit 1-2 kleinen Kollisionen und der Hilfe der gesamten Crew gelang es den beiden letztendlich, das Schiff sicher an den Anlegeplatz für den Tag zu manövrieren. Nach einer kurzen Verschnaufpause und der Inspektion der Schiffshülle hieß es dann „Landgang!“. Mit seinen bezaubernden Gassen, Brücken und vielen ausgefallenen Läden wie dem „Beerman“ mit über 3000 verschiedenen Biersorten bot Utrecht Abwechslung und Spaß bis spät in den Abend.
Am nächsten Morgen brach die Crew auf in Richtung Weesp. Die Fahrt von Utrecht nach Weesp wurde uns als besonders malerisch und schön versprochen. Nach einer nicht minder actionreichen Abfahrt aus Utrecht durch die selben Brücken und Tunnel wie bei der Hinfahrt bot sich der Crew ein wunderbarer Ausblick bei der Fahrt auf dem ruhigen Flussabschnitt Richtung Weesp. Gemütliche Hausboote, grüne Felder und urige Wohnhäuser zierten die Ufer. Weesp liegt nahe Amsterdam, bietet jedoch ein ruhiges und ur-holländisches Ambiente, welches in starkem Kontrast zur wilden Metropole Amsterdam steht. Nach diversen Schleusen- und Brückenmanövern erreichte die aceArt-Crew Weesp gegen Nachmittag und erkundete die Stadt. Dort wurde in Saus und Braus gespeist und getrunken, um die hart arbeitenden Matrosen für die Strapazen der Seefahrt zu entlohnen.
In der Frühe wurden die Leinen los gemacht und die Crew stach in See – mit Ziel Amsterdam. Auf der Fahrt dorthin erspähte der diensthabende Navigator eine Insel auf dem Ijsselmeer. Dort legte die Crew gekonnt an dem kleinen Pier an und besichtigte die Befestigungsanlage „Pampus“. Anschließend begab sich die Crew zurück an Bord um gen Amsterdam in See zu stechen. Dort konnte sich die Crew noch einmal beweisen, als es darum ging im dortigen Yachthafen anzulegen. Gekonnt navigierte die Crew zwischen anderen Booten und Seglern. Anschließend wurde Amsterdam unsicher gemacht und die Crew legte sich in der Nacht erschöpft aber glücklich zur Ruhe. Die Fahrt zurück in den Heimathafen des Schiffes verlief dank der Fähigkeiten unserer erfahrenen Seebären ohne größere Probleme und so wurde am Sonntag die Heimreise nach Stuttgart angetreten.

aceArt GmbH - Ihre Internetagentur in Stuttgart

Sie benötigen Unterstützung bei Webseiten, Apps, IT und neuen Technologien wie Laravel, Angular etc.?
Dann sind wir die richtigen Ansprechpartner für Sie!

Wir entwickeln für Sie moderne und professionelle Business Websites, die zudem Suchmaschinen optimiert ist. Wir vereinen Webdesign, Programmierung und SEO in einem um Ihnen einen Full-Service anzubieten. Darüber hinaus benötigen Sie noch eine Software oder mobile App? Auch da helfen unsere IT-Spezialisten. Von der Konzeption über Applikations Entwicklung bis zum release und darüber hinaus als Support, stehen wir an Ihrer Seite. Viele Dienstleistungen - ein Ansprechpartner. Vereinbaren Sie jetzt mit uns einen unverbindlichen Termin aus. Wir freuen uns auf Sie!

Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihre Angaben für die Beantwortung Ihrer Anfrage bzw. Kontaktaufnahme verwenden. Eine Weitergabe an Dritte findet grundsätzlich nicht statt, es sei denn geltende Datenschutzvorschriften rechtfertigen eine Übertragung oder wir dazu gesetzlich verpflichtet sind. Sie können Ihre erteilte Einwilligung jederzeit mit Wirkung für die Zukunft widerrufen. Im Falle des Widerrufs werden Ihre Daten umgehend gelöscht. Ihre Daten werden ansonsten gelöscht, wenn wir Ihre Anfrage bearbeitet haben oder der Zweck der Speicherung entfallen ist. Sie können sich jederzeit über die zu Ihrer Person gespeicherten Daten informieren. Weitere Informationen zum Datenschutz finden Sie auch in der Datenschutzerklärung dieser Webseite.

Cookie-Einstellung

Bitte treffen Sie eine Auswahl. Weitere Informationen zu den Auswirkungen Ihrer Auswahl finden Sie unter Hilfe.

Treffen Sie eine Auswahl um fortzufahren

Ihre Auswahl wurde gespeichert!

Hilfe

Hilfe

Um fortfahren zu können, müssen Sie eine Cookie-Auswahl treffen. Nachfolgend erhalten Sie eine Erläuterung der verschiedenen Optionen und ihrer Bedeutung.

  • Alle Cookies zulassen:
    Jedes Cookie wie z.B. Tracking- und Analytische-Cookies.
  • Nur First-Party-Cookies zulassen:
    Nur Cookies von dieser Webseite.
  • Keine Cookies zulassen:
    Es werden keine Cookies gesetzt, es sei denn, es handelt sich um technisch notwendige Cookies.

Sie können Ihre Cookie-Einstellung jederzeit hier ändern: Startseite. Startseite

Zurück