nodejs表示从事件处理程序中重定向

时间:2016-07-26 18:11:34

标签: javascript node.js redirect express

我正在处理的nodejs应用程序是使用express和 路由中间件。我正在添加某种许可功能 此应用程序,它会定期检查是否到期。

发现它过期后,会发出授权失败事件 陷入事件处理程序。我想重定向或打开一个新页面 在事件处理程序中。

  1. 这是正确的做法吗? (我是node和js的新手)
  2. 我无权访问事件处理程序中的响应对象。 那么在这种情况下我如何重定向到另一个页面?

    //Start of the code
    var app = express();
    
    //view engine setup
    app.set('views', path.join(__dirname, 'views'));
    app.set('view engine', 'jade');
    //Deleted the code to keep it minimal
    
    app.use('/', routes);
    app.use('/sensor', sensorPage);
    app.use('/export', exportPage);
    app.use('/exportsensormetrics', exportSensorMetricsPage);
    
    //Error Handling
    app.use(function(req, res, next)
    {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
    });
    
    
    //The product key authorise() function periodically checks for expiry
    
    
    var authutils = require('./authutils.js');
    authutils.authorise();
    
    //This is the Event Handler
    
    authutils.authEvent.on('authorisation', function(data)
    {
        if(data == 'passed')
    {
        utils.dump("authutils::authEvent::on: Authorisation Passed");
    }
    else if(data == 'failed')
    {
        //Auth failed
        //I want to redirect from here and open page which says expired
        //Can I redirect from here?
    }
    });
    

1 个答案:

答案 0 :(得分:0)

了解如何使用Express的最佳方式 - 它正式阅读docs

检查许可中间件

function checkLicense(req, res, next) {
    if (*check*)
        next(); // move to sensorPage 
    else
        next(new Error('License exiped')); // move to first registered error-middlware
}    

将此中间件分配给应用程序

app.use(checkLicense); // if you want check all request
...
app.use('/sensor', checkLicense, sensorPage); // if you need check only specific route

错误中间件必须有第一个参数错误

app.use(function(err, req, res, next) {...});