我将node Sent事件与node.js应用程序结合使用。我尝试实现一个监视linux机器上的进程的服务。
所以我尝试获取进程的PID并使用monitor-pid
来读出有关进程的一些信息。
我想要实现的目标:
当我找到有效的PID时,我调用next()
来路由到打印出monitor-pid
对象内容的函数。
此对象具有end
侦听器,在删除进程的PID时调用该侦听器。在这个end
听众中,我想'回到'app.get('/')
。
我尝试使用app.redirect('/')
,但这不起作用,因为用于发送服务器已发送事件的HTTP标头已在第一个路径中设置。
问题:
如何跳回调用next()
的函数?是否有类似before()
的内容?
代码:
mp
对象是在getPidSync()
函数中创建的。
var express = require('express');
var app = express();
var MonitorPid = require('monitor-pid');
var mp;
app.get('/', function (req, res, next) {
var interval;
res.writeHead(200, {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
"Connection": "keep-alive"
});
var pidTmp;
interval = setInterval(function() {
if(typeof pidTmp === "undefined" || pidTmp === "") {
pidTmp = getPidSync();
} else {
next();
}
}, 1000);
req.connection.addListener("close", function () {
if(mp != null) mp.stop();
if(typeof interval !== 'undefined') clearInterval(interval);
}, false);
}, function(req, res) {
if(typeof mp !== 'undefined') {
mp.on('monitored', function (pid, stats) {
res.write('data:' + JSON.stringify(stats) + '\n\n');
});
mp.on('end', function (pid) {
res.redirect('/');
console.error('end', pid);
});
}
});
app.listen(3002, function () {
console.log('Example app listening on port 3002');
});