2016-03-26 10 views
0

Ich brauche Cookies mit Electron, aber es läuft auf file: // und wie es sich herausstellt, unterstützt Chromium nicht lokale Cookies.Einen Mini-Server in Elektron spinnen

Also muss ich einen kleinen HTTP-Server hochfahren, um die Session-Cookies zu speichern. Ich muss mich mit meiner API authentifizieren und den Cookie speichern, damit ich Abfragen an die API senden kann.

Ich habe ein paar Ressourcen gefunden, dies zu tun: https://www.npmjs.com/package/electronify-server https://github.com/frankhale/electron-with-express

Und ich habe alle über das Internet suchen, aber ich kann keine Lösung zum Laufen zu bringen scheinen. . :(

Ich habe einen Winkel App auf der Electron So werde ich versuchen, so viele Informationen enthalten, wie ich kann

main.js -. http://pastebin.com/bnBtBTbm

script.js - http://pastebin.com/x7K8VzEW

Dateistruktur -

enter image description here

ich versuche, diese App so einfach ein zu halten s möglich. Ich bin nicht sicher, was ich brauche, um dies auf localhost statt file: // laufen zu lassen - also würde jede Hilfe sehr geschätzt!

Antwort

0

Ich bin neugierig, warum Sie speziell Cookies brauchen? Die meiste Zeit wird normale elektronische Speicherung in Electron besser funktionieren. Davon abgesehen haben Sie Angular erwähnt, das lieber bedient wird.

Ich vereinfachte einen einfachen HTTP-Server, den ich in einer meiner Electron-Apps verwende. Sie werden auf npm install mime müssen, aber alles andere eingebaut ist.

var app = require('app'); 
var http = require('http'); 
var fs = require('fs'); 
var path = require('path'); 
var mime = require('mime'); 

function handleRequest(req, res) { 
    var file = path.join(app.getAppPath(), req.url); 

    fs.exists(file, function(exists) { 
     if (exists && fs.lstatSync(file).isFile()) { 
      res.setHeader("Content-Type", mime.lookup(file)); 
      res.writeHead(200, { 
       'Access-Control-Allow-Origin': '*' 
      }); 
      fs.createReadStream(file).pipe(res); 

      return; 
     } 

     res.writeHead(404); 
     res.write('404 Not Found'); 
     res.end(); 
    }); 
} 

var server = http.createServer(handleRequest); 

server.listen(8888, function() { 
    console.log('server started at http://localhost:8888'); 
}); 

Beachten Sie, dass dieser Wille Server Ihre gesamte Electron App. Möglicherweise möchten Sie es ändern, um nur ein bestimmtes Verzeichnis zu bedienen.

Beachten Sie auch, dass ich dies nicht nach der Änderung getestet habe und wenn es überhaupt funktioniert, kann es nicht alle Fälle behandeln. ;)

+0

Jetzt testen! :) Ich poste ein Update, nachdem ich versucht habe es zu implementieren! Vielen Dank! Was Cookies angeht, arbeite ich mit OpenBMC zusammen - ihre REST-API sendet ein Authentifizierungs-Cookie zurück, das ich verwenden muss, um nach dem Login weitere Abfragen durchführen zu können. Und weil Electron Chrom verwendet, tut es das nicht lokale Cookies unterstützen: z file: /// - Also muss ich meine App stattdessen auf einem http: // Protokoll ausführen. Wenn dies andere Ideen auslöst, lass es mich wissen! Ich war noch nie in dieser Situation, also bin ich mir nicht 100% sicher, ob ich überhaupt die richtige Frage stelle. – Lindsay

+0

Okay, also funktioniert es! :) Aber es läuft immer noch auf localhost. Ich denke, ich brauche 127.0.0.1 - gibt es eine Möglichkeit, das zu funktionieren? – Lindsay

+0

Es sollte nichts an der Verwendung von localhost liegen. Es sei denn, es funktioniert aus irgendeinem Grund nicht? – Teak