2016-07-26 13 views
0

Die NodeJS Anwendung arbeite ich an geschrieben mit Express- und Middleware-Routing. Ich füge eine Art Lizenz Funktionalität diese Anwendung, wo sie in regelmäßigen Abständen überprüft nach Ablauf überprüft.NodeJS express Umleitung aus einem Event-Handler

Nachdem festgestellt wird, dass es abgelaufen ist, gibt es ein Autorisierungsfehler-Ereignis aus, das im Ereignishandler abgefangen wurde. Ich möchte umleiten oder eine neue Seite von innerhalb der Event-Handler zu öffnen.

  1. Ist dies der richtige Ansatz? (Ich bin neu zu Knoten und js)
  2. Ich habe keinen Zugriff auf Response-Objekt in den Event-Handler. So in einem solchen Fall, wie ich auf eine andere Seite umleiten?

    //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? 
    } 
    }); 
    

Antwort

0

Der beste Weg, wie Express nutzen zu lernen - es docs offizielle gelesen hat.


prüfen Lizenz Middle

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

Assign diese Middleware-Anwendung

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

Fehler Middleware muss erste Argument haben Fehler

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

Danke Aikon für die Antwort. Kann ich es vermeiden, das mit Anfragen zu verknüpfen? Ich mag diese Prüfung im Hintergrund laufen zu lassen und, wenn es die Bedingung trifft, möchte ich eine Seite öffnen? – Ram

+0

Es ist ein bisschen seltsam, aber Sie können es tun. Ein einfacher Weg ist: client sendet eine ajax-Anfrage an den Server jede N Sekunde und analysiert die Serverantwort. Wenn Lizenz überprüfen ist nicht dann tun Client 'location.href =‚/ badLicense''. Eine weitere Möglichkeit ist die Verwendung websocket: Server Validate Lizenz durch den Timer alle Kunden und senden Nachricht über websocket diese Lizenz nicht gültig ist. Der Kunde erhält es und geht auf die Seite 'badLicense'. –

+0

Danke Aikon. Ich habe den zweiten Ansatz verwendet, Webscokets zu verwenden, um mit den Clients zu kommunizieren, und es funktioniert. Vielen Dank – Ram