2016-05-04 7 views
1

Kürzlich fing ich an, an meiner ersten Elektronen-App zu arbeiten und stieß auf ein Problem, hoffe, dass jemand mir helfen könnte.Elektron: wie AngularJS in Elektron ohne CSRF-Schutz ausgeführt wird?

Ich möchte Electron verwenden, um schnell eine cool aussehende App zu erstellen, indem Sie ein Admin Backend AngluarJS HTML-Thema verwenden.

Das AngluarJS-Thema funktioniert gut aus einer http: // Quelle, aber nicht wenn ich das Thema von einem lokalen Laufwerk wie das Laufwerk C: \ laden, bricht es das Thema, weil (ich denke) von CSRF-Schutzrichtlinien in Chrome.

Jetzt googelte ich meinen Arsch, aber ich kann keine gute Lösung finden. Ich dachte, dass das Ausführen eines http-Servers im Elektron eine Lösung sein könnte, also habe ich das npm http-server-Paket ausprobiert. Problem bei diesem Ansatz ist, dass der nodejs-Code in diesem Fall nicht mehr funktioniert, da der http-Server nur statische Dateien verarbeiten wird.

Gibt es vielleicht eine andere Lösung?

Danke für das Denken mit mir!

Antwort

1

Electron hat kein Problem mit einer AngularJs App. Ich habe ein paar Electron-Anwendungen mit Angular ohne CSRF-Probleme gebaut.

Eine Möglichkeit, dies zu umgehen ist es, einen einfachen Server erstellen innerhalb Elektronen ausgeführt wird, wie unten gezeigt:

// <YOUR-ENTRY-FILE>.js 

app.on('ready', function() { 
    mainWindow = new BrowserWindow({ 
     width: 800, 
     height: 600 
    }); 

    var server = http.createServer(requestHandler).listen(9527); 

    mainWindow.loadUrl('http://localhost:9527/index.html'); 
    mainWindow.webContents.on('did-finish-load', function() { 
     mainWindow.setTitle(app.getName()); 
    }); 
    mainWindow.on('closed', function() { 
     mainWindow = null; 
     server.close(); 
    }); 
}); 

function requestHandler(req, res) { 
    var 
     file = req.url == '/' ? '/index.html' : req.url, 
     root = __dirname + '/www', 
     page404 = root + '/404.html'; 

    getFile((root + file), res, page404); 
}; 

function getFile(filePath, res, page404) { 

    fs.exists(filePath, function(exists) { 
     if(exists) { 
      fs.readFile(filePath, function(err, contents) { 
       if(!err) { 
        res.end(contents); 
       } else { 
        console.dir(err); 
       } 
      }); 
     } else { 
      fs.readFile(page404, function(err, contents) { 
       if(!err) { 
        res.writeHead(404, {'Content-Type': 'text/html'}); 
        res.end(contents); 
       } else { 
        console.dir(err); 
       } 
      }); 
     } 
    }); 
}; 

Es sollte wirklich nicht notwendig sein, für Sie, dies zu tun, überprüfen Sie die Pfade und haben diese als letzte Option.

+0

Danke für den Kommentar. Ich denke, das ist in der Tat ein wenig "dreckig", aber es ist schön, die Möglichkeit zu haben, die App als http-Server zu betreiben und nodejs im Elektron zu verwenden. Danke für das Codebeispiel, es wird den Trick machen. –