Электрон: как запустить AngularJS в Электрон без защиты CSRF?

Недавно я начал работать над своим первым электронным приложением и столкнулся с проблемой, надеюсь, кто-нибудь сможет мне помочь.

Я хотел бы использовать Electron, чтобы быстро создать классное приложение с помощью HTML-темы Admin Backend AngluarJS.

Тема AngluarJS отлично работает из источника http://, но не тогда, когда я загружаю тему с локального диска, такого как диск C:\, она нарушает тему, потому что (я думаю) политики защиты CSRF в chrome.

Теперь я погуглил свою задницу, но не могу найти хорошего решения. Я думал, что запуск http-сервера в электронном режиме может быть решением, поэтому я попробовал пакет http-сервера npm. Проблема этого подхода в том, что в этом случае код nodejs больше не работает, поскольку http-сервер будет обрабатывать только статические файлы.

Может быть, есть другое решение?

Спасибо, что подумали со мной!

1 ответ

Решение

Electron без проблем запускает приложение AngularJs. Я создал несколько приложений Electron, использующих Angular, без проблем с CSRF.

Один из способов обойти это - создать простой сервер, работающий внутри электрона, как показано ниже:

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

Там действительно не должно быть необходимости делать это, проверять свои пути и иметь это в качестве последнего варианта.

Довольно поздно, но я нашел решение для этого, может быть, это когда-нибудь поможет кому-то qaru.site/questions/435 /... / a / 60452312/1284216

Другие вопросы по тегам