2017-01-30 90 views
2

我正在尝试使用Electron(原名Atom Shell)创建应用程序。此应用程序包装AngularJS应用程序,并与在nodejs中创建的端点进行交互以编辑和保存HTML内容。我能够创建没有问题的应用程序。电子关闭按钮不起作用

当我尝试从电子访问“/ saveContent”导致关闭按钮(Windows在右上角关闭)变得无法响应时,但是最小化和最大化工作正常,没有问题。如果我通过电子访问任何其他端点,则不会出现此问题。我已经尝试了同步文件写入和其他。所以我假设main.js中的“/ saveContent”是问题的原因。

如果我在“Windows任务管理器”中结束node.exe,则会关闭整个应用程序。

我具有低于

'use strict'; 
var fs = require("fs"); 
const util = require('util') 

var cheerio = require("cheerio"); 

var express = require('express'); 
var exapp = express(); 

var bodyParser = require('body-parser'); 
var urlencodedParser = bodyParser.urlencoded({extended: false}); 
exapp.use(bodyParser.json()); 

const electron = require('electron'); 
const app = electron.app; // Module to control application life. 
const BrowserWindow = electron.BrowserWindow; // Module to create native browser window. 
const path = require('path') 
const url = require('url') 
var mainWindow = null; 



app.on('ready', function() { 
    mainWindow = new BrowserWindow({width: 1280, height: 900, title: "2018JL", "nodeIntegration":false}); 
    //mainWindow.loadURL(__dirname + '/app/index.html'); 
    mainWindow.loadURL('http://localhost:5001/'); 

    mainWindow.on('closed', function() { 
    mainWindow = null; 
    }); 
}); 

app.on('window-all-closed', function() { 
    if (process.platform != 'darwin') { 
     app.quit(); 
    } 
}); 


exapp.get('/editPage', function(req,res){ 
    if(req){ 
    //console.log("req.query.editURL "+ req.query.editURL); 
     var url = req.query.editURL; 
     var editURL = path.join(__dirname + '/app/views'+ url+".html"); 

     fs.exists(editURL, function(fileok){ 
      if(fileok){ 
      fs.readFile(editURL, 'utf8', function (err, data) { 
       if (err) { 
        console.log("error.... "+ err); 
        return console.error(err); 
       } 
       //console.log("data "+ editURL); 
       res.send(JSON.stringify({path:editURL, content:data})); 
      }); 
      }else{ 
       console.log("file not found"); 
      } 
     }); 
    } 
}); 

exapp.post('/saveContent', function (req, res) { 
    //console.log(util.inspect(req, false, null)) 
    if (req) { 
     //console.log(req.query.url + " ------ " + req.query.content); 

     var $ = cheerio.load(req.query.content); 
     var htmlContent = $('body').children(); 

     console.log('htmlContent '+htmlContent); 

     fs.writeFile(req.query.url, htmlContent, function(err) { 
      if (err) { 
       res.send("Error"); 
      } 
      console.log("End of write file"); 
      res.send("success"); 
     }); 
    } 
    console.log("End of function ....."); 
}); 

exapp.get('/test', function (req, res) { 
    res.send("Test success "); 
}); 


exapp.use(express.static(__dirname + '/app')); 
exapp.listen(process.env.PORT || 5001); 

客户端代码的主进程的代码下面

$scope.editPage = function() { 
      $http({method: "GET", 
       url: "/editPage", 
       params: {editURL: $location.path()} 
      }).then(function success(response) { 
       //var result = JSON.parse(response.data); 
       //console.log("HTTP Success "+response.data.path); 
       $scope.showEditor = true; 
       $scope.editURL = response.data.path; 
       tinymce.get('contentEditor').setContent(response.data.content); 
      }, function error(response) { 
       console.log("HTTP Error " + response.statusText); 
      }); 
     }; 

注释文件写入代码在“/ saveContent”不会引起电子关闭按钮无响应。

回答