Electron:如何在没有CSRF保护的情况下在Electron中执行AngularJS?
最近我开始开发我的第一个电子应用程序,遇到了一个问题,希望有人能帮我解决 我想使用Electron通过使用管理后端AngluarJS HTML主题快速创建一个看起来很酷的应用程序 AngluarJS主题在http://source上运行良好,但当我从本地驱动器(如C:\drive)加载主题时,它会破坏主题,因为(我认为)chrome中的CSRF保护策略 现在我用谷歌搜索我的屁股,但我找不到一个好的解决办法。我认为在electron中运行http服务器可能是一个解决方案,所以我尝试了npm http服务器包。这种方法的问题是nodejs代码在这种情况下不再工作,因为http服务器只处理静态文件 有没有别的解决办法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在运行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,这很好。感谢您提供的代码示例,它将完成此任务。