hmm: ../ wird nicht erkannt

Hi Leute,

ich habe eine Express Node JS App welche eine HTML anzeigen soll, leider wird mir folgender fehler angezeigt:

Error: ENOENT: no such file or directory, stat '/home/ubuntu/workspace/package/skillmatrixtool/js/view../html/main.html' at Error (native)

Die Pfadangabe lautet:

../../../html

Auf meinen entwicklungs Ubuntuserver hat alles sauber funktioniert, aber jetzt wo ich das ganze auf einen identischen ubuntu server teste frisst mir der server die "../" weg und findet deshalb die datei nicht .... was kann ich machen?

  1. /home/ubuntu/workspace/package/skillmatrixtool/js/view../html/main.html
    

    Klare Sache. Schon ein Verzeichnis

    /home/ubuntu/workspace/package/skillmatrixtool/js/view../
    

    gibt es nicht.

    Versuche:

    /home/ubuntu/workspace/package/skillmatrixtool/js/view/../../../html/main.html
    
    1. und das ist mein problem.

      auf meinem entwicklungsserver bekomme ich den pfad auch so zusammengebaut:

      /home/ubuntu/workspace/package/skillmatrixtool/js/view/../../../html/main.html

      aber jetzt wo ich einen zweiten identischen server gestartet habe und es dort ausprobiere baut er mir den pfad so zusammen:

      /home/ubuntu/workspace/package/skillmatrixtool/js/view../html/main.html

      der code ist für beide server der gleiche:

      config.json:

      {
          "routings": [
              {
                  "route": "/",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "main.html",
                  "sessionSite": 0
              },
              {
                  "route": "/registrieren",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "registrieren.html",
                  "sessionSite": 0
              },
              {
                  "route": "/datenschutz",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "datenschutz.html",
                  "sessionSite": 0
              },
              {
                  "route": "/kontakt",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "kontakt.html",
                  "sessionSite": 0
              },
              {
                  "route": "/einstellungen",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "/einstellungen.html",
                  "sessionSite": 1
              },
              {
                  "route": "/skills",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "team.html",
                  "sessionSite": 1
              },
              {
                  "route": "/mitarbeiter",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "mitarbeiter.html",
                  "sessionSite": 1
              },
              {
                  "route": "/dashboard",
                  "pathToHtmlFile":"../../../pivottable/examples",
                  "htmlFileName": "/d3.html",
                  "sessionSite": 1
              },
              {
                  "route": "/details",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "mitarbeiterDetails.html",
                  "sessionSite": 1
              },
              {
                  "route": "/admin",
                  "pathToHtmlFile":"../../../html",
                  "htmlFileName": "admin.html",
                  "sessionSite": 1
              }
          ],
          "clientRessourcen": [
              {
                  "clientPath": "/ressourcen",
                  "serverPath": "../../../ressourcen"
              },
              {
                  "clientPath": "/js",
                  "serverPath": "../../../js"
              },
              {
                  "clientPath": "/pivottable",
                  "serverPath": "../../../pivottable"
              }
          ]
      }
      

      und im ordner view meine view.js:

      /**
       *  View.
       */
      function View(configJson, dbManager) {
          
          var express = require('express');
          var session = require('express-session');
          var myParser = require("body-parser");
          const Services = require('./services.js');
      
          /**
           *  Verschickt den HTML-Client an den Browser.
           */
          this.sendClient = function() {
              "use strict";
              var app = createApp();
              Services(app, dbManager);
              var port = process.env.port || 8080;
              
              for(var i = 0; i < configJson.routings.length; i++) {
                  let file = configJson.routings[i];
                  if(file.sessionSite == 0) {
                      app.get(file.route, function(req, res) {
                          res.sendfile(file.htmlFileName, { root: __dirname + file.pathToHtmlFile });
                      });
                  } else {
                      app.get(file.route, function(req, res) {
                          if(req.session.email && (req.session.user || file.htmlFileName == "/d3.html" || file.htmlFileName == "/einstellungen.html")) {
                              if(!req.session.user && file.htmlFileName == "/d3.html") {
                                  res.sendfile("/d3small.html", { root: __dirname + file.pathToHtmlFile });
                              } else if (!req.session.user && file.htmlFileName == "/einstellungen.html") {
                                  res.sendfile("/einstellungenSmall.html", { root: __dirname + file.pathToHtmlFile });
                              } else {
                                  res.sendfile(file.htmlFileName, { root: __dirname + file.pathToHtmlFile });
                              }
                          } else {
                              var rootFile = configJson.routings[0];
                              res.sendfile(rootFile.htmlFileName, { root: __dirname + rootFile.pathToHtmlFile });
                          }
                      });
                  }
              }
              
              app.listen(port);
          }
          
          /**
           *  Erstellt eine Web Application mittels Express.
           */
          function createApp() {
              var app = express();
              app.use(myParser.urlencoded({extended : true}));
              app.use(session({
                  secret: '2C44-4D44-WppQ38S',
                  resave: true,
                  saveUninitialized: true
              }));
              
              for(var i = 0; i < configJson.clientRessourcen.length; i++) {
                  var clientRessource = configJson.clientRessourcen[i];
                  app.use(clientRessource.clientPath,  express.static(__dirname + clientRessource.serverPath));
              }
              return app;
          }
      }
      
      module.exports = View;
      

      :-( wieso geht das auf dem einen und auf dem anderen nicht..... wuuuusaaaaaa :-((((((

      1. Also ne Config mit relativen Pfadangaben ist eine Katastrophe. Wenn schon Config dann so (Idee), daß Verzeichnissse konfigurierbar sind, z.B. TemplateDir, FileDir und Ressourcen für die eine Datei konfiguriert wird kriegen alle ein einheitliches Attribut file=

        Wobei FileDir, TemplateDir in einem extra Block konfigurierbar sind. MfG

        PS: Bei einem Request muss Deine Config jedesmal komplett durchlaufen werden. Das geht natürlich auf Kosten der Performanze und von daher auch zweckmäßiger zu machen.

      2. Moin @hmm,

        was spricht denn dagegen, einfach sicherheitshalber noch einen / einzufügen? AFAIK ist /home/bla//blubb das Gleiche wie /home/bla/blubb.

        Viele Grüße
        Robert