2015-04-28 3 views
0

Простите меня, если я использовал неправильную терминологию для описания моей проблемы, пожалуйста, исправьте меня. Я развиваюсь в узле и выражаю. Я хочу, чтобы иметь возможность звонить nodemailer из любого места в моем приложении без повторного создания транспортера. Как мне это сделать, я думал, что мне просто нужно положить это в app.js, и тогда это сработает. Я использую mailgun-nodemailer.Настройки глобального узла

app.js

var auth = { 
auth: { 
    api_key: 'key-XXXXX', 
    domain: 'XXXXX.mailgun.org' 
} 
} 

var mailgun = nodemailer.createTransport(mg(auth)); 

acontroller.js

mailgun.sendMail(mailOptions, function(err) { 
    req.flash('success', { msg: 'Success! Your password has been changed.' }); 
    done(err); 
    }); 
+0

Вы можете назначить клиент 'mailgun' для объекта' app' Express, а затем использовать его из любого маршрута ... –

ответ

2

Просто удалите ключевое слово var и использовать global вместо так что вы mailgun глобальна. Вам нужно будет загрузить файл с помощью require('app.js') в начале вашего приложения. (Прежде чем вы должны назвать его, поэтому в основном, когда вы начинаете выразить я бы сказал)

var auth = { 
auth: { 
    api_key: 'key-XXXXX', 
    domain: 'XXXXX.mailgun.org' 
} 
} 

global.mailgun = nodemailer.createTransport(mg(auth)); 

Обратите внимание, что вы также можете использовать module.exports.mailgun = nodemailer.createTransport(mg(auth)), а затем загрузить его с помощью

require('app.js').mailgun.sendMail(mailOptions, function(err) { 
    req.flash('success', { msg: 'Success! Your password has been changed.' }); 
    done(err); 
    }); 

В этом случае я бы советую переименовать файл app.js в mailgun.js, имеет больше смысла.

Таким образом, существует два способа: либо глобальный var, либо использование обычного node.js требуют функции, как обычно, мы используем способ require, но если вы не хотите беспокоиться о путях, глобальный var имеет смысл.

+2

Определение переменных без 'var' не следует поощрять - строгий режим запрещает (по уважительной причине) такую ​​операцию , Если вы действительно хотите объявить глобально доступную переменную, назначьте ее прямому объекту 'global'. –

+1

Хорошо, я, как правило, забываю об этом, спасибо. – Vadorequest