2016-03-26 32 views
0

我需要在Electron上使用cookie,但它運行在file://上,事實證明,Chromium不支持本地Cookie。在Electron中旋轉微型服務器

所以我需要啓動一個小的http服務器以保存會話cookie。我需要使用我的API進行身份驗證並保存cookie,以便我可以查詢API。

我已經發現了一些資源,要做到這一點: https://www.npmjs.com/package/electronify-server https://github.com/frankhale/electron-with-express

而且我一直在尋找所有在互聯網上,但我似乎無法得到解決的工作。 。:(

我對電子的頂部角應用程序,所以我會盡量包含儘可能多的信息,我可以

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

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

文件結構 -

enter image description here

我想保持這個應用程序一樣簡單可能。我不知道我需要什麼才能讓本地主機運行而不是file:// - 所以任何幫助都將不勝感激!

回答

0

我很好奇爲什麼你特別需要cookies?大部分時間,普通的舊本地存儲在Electron中都會更好。這就是說,你確實提到了Angular,它更喜歡被服務。

我簡化了我在一個電子應用程序中使用的基本HTTP服務器。您將需要npm install mime,但一切是內置的。

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'); 
}); 

注意,這將服務器整個電子應用。您可能想要將其更改爲僅提供特定目錄。

另外請注意,修改後我沒有測試過,如果它可以工作,它可能無法處理所有情況。 ;)

+0

現在測試! :)我會嘗試實施它後發佈更新!謝謝!就cookie而言,我正在與OpenBMC合作 - 他們的REST API發回一個身份驗證Cookie,以便在登錄後能夠進行其他查詢。因爲Electron使用Chromium,它不會支持本地cookie:例如file:/// - 所以我需要在http://協議上運行我的應用程序。如果這觸發了任何其他想法,請讓我知道!我以前從來沒有遇到過這種情況,所以即使我提出了正確的問題,我也不能100%確定。 – Lindsay

+0

好吧,它的工作原理! :)但是,它仍然在本地主機上運行。我認爲我需要127.0.0.1 - 有什麼方法可以使這項工作? – Lindsay

+0

使用本地主機應該沒有問題。除非因爲某種原因沒有工作? – Teak