在页面更改或closures时执行操作

我有一个NodeJS / Express(4.10.2)函数,通过产生一个外部subprocess:

app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); var spawn = require('child_process').spawn; var java = spawn("java", ['-cp', 'lib\\*;bin', 'com.my.app.App']); ... } 

我想要做的是添加一些匿名函数,当页面被改变,标签被closures,甚至刷新的时候会被调用。 简而言之,我想杀死产生的过程!

Google在研究这个方面对我不好。

我会做的是发送一个具有唯一值的cookie,每个请求,并将该值存储在一个地图作为关键,值是子过程对象,所以你可以杀死它。

然后在Javascript中的页面上添加一个unload处理程序,将请求发送到一个具有该唯一值的新URL,以允许您进行查杀。

例如,您的快速代码变得如下所示:

 var javaSessions = { _counter: -1 }; app.get('/', function(req, res){ res.sendFile(__dirname + '/index.html'); var spawn = require('child_process').spawn; var javaSessionId = javaSessions._counter++; res.cookie('java_session_id', javaSessionId); var java = spawn("java", ['-cp', 'lib\\*;bin', 'com.my.app.App']); javaSessions[javaSessionId] = java; ... }); app.get('/unload/:id', function (req, res) { var java = javaSessions[req.params.id]; javaSessions[req.params.id] = null; java.kill(); }); 

然后在index.html ,在底部添加以下标记(假设您不需要定位比Internet Explorer 8旧的浏览器):

 <script type="text/javascript"> window.onunload = function () { var req = new XMLHttpRequest(), javaSessionId = document.cookie.replace(/(?:(?:^|.*;\s*)java_session_id\s*\=\s*([^;]*).*$)|^.*$/, "$1"); // regex from https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#Example_.232.3A_Get_a_sample_cookie_named_test2 req.open("GET", "/unload/" + javaSessionId); }; </script> 

您也可以从请求中获取cookie值,而不需要在Javascript中显式读取它,并将其作为URL参数发送。 它可能已经与请求一起发送。

你将需要testing所有这一切,这是所有非常假设的代码,你将不得不尝试自己。