2017-11-01 16 views
0

私はHerokuで動作するSails.jsアプリケーションを構築しています。数時間ごとに「CRON」ジョブを実行するには、Heroku Schedulerを使用する必要があります。スケジューラでは1つのコマンドしか実行できないため、1時間ごとに$ node sendEmails.jsを実行するように設定しています。プロジェクトルート内のファイルからSails.jsコントローラ関数を呼び出すにはどうすればよいですか?

問題は、sendEmails.jsはコアSails.jsプロジェクトの一部ではなく、ReportsController.jsファイル内で関数を呼び出す必要があることです。私はこれをどうやってやるのですか?私は、コントローラのロジックをsendEmails.jsにコピーしたくないのです。なぜなら、それがデータベースや他のサービスに依存して複製できないためです。コンテキストの場合:

/** 
* ReportsController 
* 
* @description  Server-side logic for managing reports 
* @help   See http://sailsjs.org/#!/documentation/concepts/Controllers 
*/ 

module.exports = { 

    // I need to call this function from sendEmails.js which is in my project root 
    generate: function(req, res) { 
     // Logic for generating reports 
    } 
} 

答えて

1

あなたはいくつかの方法でこれを行うことができます:

  1. を(良い)は、サービスを作成し、Myservice.myfunctionあるいはsails.myservice.functionのようなサービス名を呼び出します。名前のとおり、サービスはすべてのコントローラーで利用でき、世界中で使用されるコードを集中管理するために使用できます。見てください:Sails Services。コントローラ内でサービスを呼び出すことができます。次に、サービスが適切な場合は、オプション2を実行できます(または実行できません)。

  2. (あまり良くありません)コントローラまたはサービスの内部では、ファイルのパスについてマニュアルrequireを実行してください。このlet myfunctions = require('../folder/myfile.js')のようにして、 `` myfunctions.myfunction(nargs). Don't forget to use module.exports = {...} `のような関数を呼び出します。

+0

@paulgdm私はこの文脈で実際にサービスを使用することはできません。私が達成しようとしているのは、コマンドラインからsails.jsアプリケーション内のいくつかの関数を呼び出すことができるということです。これは、Herokuでスケジュールされたジョブを実行できる唯一の方法です。コマンドラインからSailsコントローラ機能にアクセスするにはどうすればよいですか? – Nag

+0

@Nagあなたの意見を見る...あなたの 'app.js'ファイルを編集する必要があるのではないかと心配しています。そこでは、セイルリフトを呼び出すときに何かをすることができます。たぶんあなたの問題を解決することができます。しかし、セイルズが使用されるように設計された方法ではないことに注意してください!それは後にMVCフレームワークです。 – paulogdm

関連する問題