2016-12-19 6 views
0

私が置いた場合、私はしかし、それは(ルータを表す)nodejsに急行apiRoutesにアジェンダをラップする方法

var apiRoutes = express.Router(); 
app.use('/api', apiRoutes); 

apiRoutes.post('/scheduler/submit', function (req, res) { 
    agenda.define('test', function() { 
     console.log('Test'); 
    }); 

    agenda.on('ready', function() { 
     agenda.every('*/1 * * * *', 'test'); 
     agenda.start(); 
    }); 
}); 

をapiRoutesに包まれたときに実行されていない、nodejsとアジェンダを使用して簡単なタスクをスケジュールしたいが、そのコードは外に出ても動作します。うーん、どんな考え?

var apiRoutes = express.Router(); 
app.use('/api', apiRoutes); 

agenda.define('test', function() { 
     console.log('Test'); 
}); 

agenda.on('ready', function() { 
     agenda.every('*/1 * * * *', 'test'); 
     agenda.start(); 
}); 

apiRoutes.post('/scheduler/submit', function (req, res) { 
    // Leave blank 
}); 
+0

あなたは 'agenda'オブジェクトは永久にまたは一度だけ要求が行われたときにそのコードを実行しますか? – Mike

+0

リクエストが行われたときにちょうど1回。出来ますか?私は、要求にconsole.logアジェンダを試して、アジェンダdbオブジェクトを正しく出力しますが、実行しません。 – digit

+0

それは*すべきです。私はそれに '.on'関数が関わっていると思っていますが、ソースコードを調べて確認しています。 – Mike

答えて

3

問題はonの機能です。エクスプレスコードでagenda.on('ready', ...)を呼び出すと、agendaエミッタのエコーのreadyアレイが受信されますが、サーバが初期化されるときにagendaがデータベースに接続されたときにのみその信号が発生します。つまり、agendaがサーバーの起動時にデータベースに接続した後、同じ信号を再度送信しないため、エクスプレスAPIのコードが実行されません。

この問題を解決するには、agendaがデータベースに正常に接続されていることを確認し、そのプロセスを実行することをお勧めします。そうでない場合は、.on('ready', ...)イベントリスナーを追加します。

サンプルソース:

var apiRoutes = express.Router(); 
app.use('/api', apiRoutes); 

// Use this to determine if a conneciton has been established between agenda 
// and the database 
var connectionEstablised = false; 

// When the connection is established, set the flag 
agenda.on('ready', function() { 
    connectionEstablished = true; 
}); 

// It's better practice to have this function defined on your agenda object 
// When the server initializes rather than having initializing it only if a POST 
// request occurrs. 
agenda.define('test', function() { 
    console.log('Test'); 
}); 



apiRoutes.post('/scheduler/submit', function (req, res) { 

    // Only execute this code if you can confirm the connection is established 
    if (connectionEstablished) { 
     agenda.every('*/1 * * * *', 'test'); 
     agenda.start(); 
    } 
}); 
+0

を更新することを忘れないでくださいあなたは保護者です。 – digit

関連する問題