2016-07-26 6 views
0

私が取り組んでいるnodejsアプリケーションは、明示的および ルーティングミドルウェアを使用して書かれています。私は何らかの種類のライセンス機能を に追加しています。このアプリケーションでは、定期的に期限切れをチェックします。nodejsはイベントハンドラ内からのリダイレクトを表現します

有効期限が切れた後、イベントハンドラでキャッチした承認失敗イベント を発行します。イベントハンドラ内で から新しいページをリダイレクトするか開こうとします。

  1. これは適切なアプローチですか? (私はノードと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? 
    } 
    }); 
    

答えて

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) {...}); 
+0

を持っている必要があります応答をあなたにAikonをありがとうございます。これを要求と結びつけるのを避ける方法はありますか?このチェックをバックグラウンドで実行したいのですが、条件に当てはまるたびにページを開きたいのですか? – Ram

+0

ちょっと奇妙ですが、あなたはそれをすることができます。簡単な方法は、クライアントがサーバーにajax-requestをN秒ごとに送信し、サーバーの応答を解析することです。もしライセンスがチェックされていなければ、クライアントは 'location.href = '/ badLicense''を実行します。別の方法は、websocketを使用することです:サーバーはクライアントのすべてのタイマーによってライセンスを検証し、そのライセンスは有効ではないwebsocket経由でメッセージを送信します。クライアントはそれを受け取り、 'badLicense'ページに行きます。 –

+0

ありがとうございます。私はWebscoketsを使ってクライアントと通信する第2のアプローチを使用し、それが機能しています。どうもありがとうございました – Ram

関連する問題