Electron:如何在没有CSRF保护的情况下在Electron中执行AngularJS?

Electron:如何在没有CSRF保护的情况下在Electron中执行AngularJS?,angularjs,csrf,electron,httpserver,Angularjs,Csrf,Electron,Httpserver,最近我开始开发我的第一个电子应用程序,遇到了一个问题,希望有人能帮我解决 我想使用Electron通过使用管理后端AngluarJS HTML主题快速创建一个看起来很酷的应用程序 AngluarJS主题在http://source上运行良好,但当我从本地驱动器(如C:\drive)加载主题时,它会破坏主题,因为(我认为)chrome中的CSRF保护策略 现在我用谷歌搜索我的屁股,但我找不到一个好的解决办法。我认为在electron中运行http服务器可能是一个解决方案,所以我尝试了npm htt

最近我开始开发我的第一个电子应用程序,遇到了一个问题,希望有人能帮我解决

我想使用Electron通过使用管理后端AngluarJS HTML主题快速创建一个看起来很酷的应用程序

AngluarJS主题在http://source上运行良好,但当我从本地驱动器(如C:\drive)加载主题时,它会破坏主题,因为(我认为)chrome中的CSRF保护策略

现在我用谷歌搜索我的屁股,但我找不到一个好的解决办法。我认为在electron中运行http服务器可能是一个解决方案,所以我尝试了npm http服务器包。这种方法的问题是nodejs代码在这种情况下不再工作,因为http服务器只处理静态文件

有没有别的解决办法


谢谢你和我一起思考

Electron在运行AngularJs应用程序时没有问题。 我已经用Angular构建了一些电子应用程序,没有CSRF问题

解决这个问题的一种方法是创建一个运行在electron内部的简单服务器,如下所示:

// <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);
                }
            });
        }
    });
};
/.js
app.on('ready',function(){
主窗口=新浏览器窗口({
宽度:800,
身高:600
});
var server=http.createServer(requestHandler).listen(9527);
mainWindow.loadUrl('http://localhost:9527/index.html');
main window.webContents.on('did-finish-load',function()){
setTitle(app.getName());
});
mainWindow.on('closed',function(){
主窗口=空;
server.close();
});
});
函数requestHandler(req,res){
变量
file=req.url==“/”?“/index.html”:req.url,
root=\uu dirname+'/www',
page404=root+'/404.html';
getFile((根+文件),res,第404页);
};
函数getFile(filePath,res,第404页){
存在(文件路径,函数(存在){
如果(存在){
fs.readFile(文件路径、函数(错误、内容){
如果(!err){
res.end(目录);
}否则{
console.dir(err);
}
});
}否则{
fs.readFile(第404页,函数(错误,内容){
如果(!err){
res.writeHead(404,{'Content-Type':'text/html'});
res.end(目录);
}否则{
console.dir(err);
}
});
}
});
};

你真的不需要这样做,检查你的路径,并把它作为最后的选择。

很晚了,但我找到了一个解决方案,也许有一天这会对某人有所帮助。

谢谢你的评论。我认为这确实有点“脏”,但可以选择作为http服务器运行应用程序,并在electron中使用nodejs,这很好。感谢您提供的代码示例,它将完成此任务。