2016-05-03 3 views
3

ノードデーモンを使用して定期的にメールボックスからメールをフェッチしたいと思います。接続方法の呼び出しはapp.jsで行われます。Javascriptオブジェクトにアクセスする - Node.jsのスコープの問題

私は私のメールボックス(mail.js)への接続に使用するJavaScriptファイル:

var imap = new Imap({ 
    user: '[email protected]', 
    password: config.get.gmail_password, 
    host: 'xxxxx', 
    port: 993, 
    tls: true 
}); 

var fetchMail = function() 
{ 
    console.log('Connection'); 
    imap.connect(); 
}; 

//fetchMail(); 

imap.once('ready', function() { 
    console.log('Ready'); 

    imap.search([ 'UNSEEN', ['FROM', 'xxxx'] ], function(err, results) 
    { 
     // Do Stuff 
    } 

exports.fetchMail = fetchMail; 

私はmail.jsから直接fetchMail()を使用する場合は、すべてが正常です。しかし

、私はapp.jsからそれを呼び出すようにしてみてください。

var mail = require('./js/mail'); 
mail.fetchMail() 

その後、mail.jsからfetchMail()機能のメソッドの滞在とimap.once('ready', function())がトリガされることはありません。

imapの範囲では、mail.jsの範囲の問題だと思います。

どうすればこの問題を解決できますか?

EDIT

私は好きではない方法でこれを解決しました。 fecthMail()関数の中にあるimap varに関連するものはすべて書きました。

ご迷惑をおかけしますが、より効率的な答えをお書きください。

+0

あなたは 'module.exportsは= fetchmailのを試しました;' 'mail.js'に? – gurvinder372

+0

はい、 'fetchMailは' app.js'の関数ではありません。 – Mornor

+0

'app.js'ではなく、' mail.js'から最初にエクスポートし、 'require'を実行して' app.js'を使用する必要があります。 – gurvinder372

答えて

1

接続するたびにイベントをバインドする必要があります。そうですね:

+0

ありがとう!私はまだ接続フェーズでブロックされています。あなたの解答を少し説明することができれば、私にも役立つだろうか? :) – Mornor

0

アプローチとアイデアは素晴らしいです。必要なのは、mail.jsファイルの構文を変更してモジュールを返すことだけです。別の言い方をすれば、あなたが

var mail = require('./js/mail');

を行う際には、メール変数であることを何を期待していますか?

あなたの周りのロジックを変更する必要がありますが、これを試してみてください:

var MailHandler = function() {} 

var imap = new Imap({ 
    user: '[email protected]', 
    password: config.get.gmail_password, 
    host: 'xxxxx', 
    port: 993, 
    tls: true 
}); 

MailHandler.init = function(){ 
    imap.once('ready', function() { 
    console.log('Ready'); 

    imap.search([ 'UNSEEN', ['FROM', 'xxxx'] ], function(err, results) 
    { 
     // Do Stuff 
    } 
    } 
} 

MailHandler.fetchMail = function() 
{ 
    console.log('Connection'); 
    imap.connect(); 
}; 

//fetchMail(); 

module.exports = new MailHandler() 
+0

ありがとうございました:) 私は 'app.js'の中で' fetchMail() '関数を呼び出していますか? – Mornor

+0

簡単:mail.fetchMail() –

+0

私はそうは思わない。 MailHandlerモジュールをエクスポートすると、それ自身のインスタンスが作成されます。このインスタンスは 'imap.once( 'ready'、function(){});を呼び出すことによって作成され、' imap.connect() 'が実行されたときにトリガされます。私は、このアプローチには正しいことがないと思う。しかし、私は間違っているかもしれない、あなたは説明できますか? – Mornor