如何从ExpressJS中的'next()'函数返回路由

时间:2016-04-08 11:24:57

标签: javascript node.js express server-sent-events

我将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');
});

0 个答案:

没有答案