Ok das war eine lange Suche und endlich konnte ich es lösen. Mein erster Fehler war, dass Routen nicht dazu geeignet sind, eine Verbindung zu einer Datenbank herzustellen, da sie nur das http-Protokoll verwenden.
Jetzt blieben mir noch 2 Anwendungsfälle
- Sie arbeiten auf Ihrem lokalen Computer und möchten Code testen, den Sie später auf OpenShift hochladen
- Sie stellen diesen Code für OpenShift bereit (muss sich im selben Projekt befinden, ist aber eine andere App als die Datenbank)
1. Lokaler Computer
Da die Route nicht funktioniert, wird Portweiterleitung verwendet. Ich habe das schon einmal gelesen, aber nicht wirklich verstanden, was es bedeutet (ich dachte, der Dienst selbst leitet bereits Ports weiter).
Wenn Sie sich auf Ihrem lokalen Rechner befinden, machen Sie Folgendes mit oc
oc port-forward <pod-name> <local-port>:<remote-port>
Sie erhalten die Information, dass der Port weitergeleitet wird. Nun, die Sache ist, dass Sie sich in Ihrer App jetzt mit localhost verbinden (sogar auf Ihrem lokalen Rechner)
2. App läuft auf OpenShift
Nachdem Sie Ihren Code in OpenShift hochgeladen haben (in meinem Fall einfach zum Projekt hinzufügen --> Node.js --> Repository hinzufügen), funktioniert localhost nicht mehr Solange Sie sich im selben Projekt befinden, haben Sie viele Informationen in Ihren Umgebungsvariablen. Überprüfen Sie also einfach den Namen des Dienstes Ihrer Datenbank (in meinem Fall mongodb) und Sie werden den zu verwendenden Host und Port finden
Zusammenfassung
Hier ist ein kleines Codebeispiel, das jetzt sowohl auf dem lokalen Computer als auch auf OpenShift funktioniert. Ich habe bereits eine persistente MongoDB auf OpenShift namens mongodb eingerichtet.
Der Code macht nicht viel, aber er stellt eine Verbindung her und sagt Ihnen, dass er es getan hat, damit Sie wissen, dass er funktioniert.
var mongoose = require('mongoose');
// Connect to Mongodb
var username = process.env.MONGO_DB_USERNAME || 'someUserName';
var password = process.env.MONGO_DB_PASSWORD || 'somePassword';
var host = process.env.MONGODB_SERVICE_HOST || '127.0.0.1';
var port = process.env.MONGODB_SERVICE_PORT || '27017';
var database = process.env.MONGO_DB_DATABASE || 'sampledb';
console.log('---DATABASE PARAMETERS---');
console.log('Host: ' + host);
console.log('Port: ' + port);
console.log('Username: ' + username);
console.log('Password: ' + password);
console.log('Database: ' + database);
var connectionString = 'mongodb://' + username + ':' + password +'@' + host + ':' + port + '/' + database;
console.log('---CONNECTING TO---');
console.log(connectionString);
mongoose.connect(connectionString);
mongoose.connection.once('open', (data) => {
console.log('Connection has been made');
console.log(data);
});