Создание экспортируемого объекта или модуля для переноса сторонней библиотеки с помощью CommonJS / NodeJS javascript - PullRequest
2 голосов
/ 28 апреля 2011

Я новичок в JavaScript и создании классов / объектов. Я пытаюсь обернуть код библиотеки с открытым исходным кодом несколькими простыми методами для использования в моих маршрутах.

У меня есть следующий код, который взят прямо из источника (репозиторий Sjwalter's Github; спасибо Стивену за библиотеку!)

Я пытаюсь экспортировать файл / модуль в мой основной файл app / server.js примерно так:

var twilio = require('nameOfMyTwilioLibraryModule');

или что мне нужно сделать.

Я ищу создание таких методов, как twilio.send(number, message), которые я могу легко использовать в своих маршрутах, чтобы мой код был модульным. Я пробовал несколько разных способов, но ничего не смог заставить работать. Это может быть не очень хороший вопрос, потому что вам нужно знать, как работает библиотека (и Twilio тоже). Линия var phone = client.getPhoneNumber(creds.outgoing); удостоверяет, что мой исходящий номер является зарегистрированным / оплаченным номером.

Вот полный пример, который я пытаюсь обернуть своими собственными методами:

var TwilioClient = require('twilio').Client,
Twiml = require('twilio').Twiml,
creds = require('./twilio_creds').Credentials,
client = new TwilioClient(creds.sid, creds.authToken, creds.hostname),
// Our numbers list. Add more numbers here and they'll get the message
numbers = ['+numbersToSendTo'],
message = '',
numSent = 0;

var phone = client.getPhoneNumber(creds.outgoing);
phone.setup(function() {

for(var i = 0; i < numbers.length; i++) {
    phone.sendSms(numbers[i], message, null, function(sms) {
        sms.on('processed', function(reqParams, response) {
            console.log('Message processed, request params follow');
            console.log(reqParams);
            numSent += 1;
            if(numSent == numToSend) {
                process.exit(0);
            }
        });
    });
}

}); `

1 Ответ

2 голосов
/ 28 апреля 2011

Просто добавьте функцию (и), которую вы хотите предоставить в качестве свойств объекта exports.Предполагая, что ваш файл был назван mytwilio.js и хранится в app/ и выглядит как

app / mytwilio.js

var twilio = require('twilio');
var TwilioClient = twilio.Client;
var Twiml = twilio.Twiml;
var creds = require('./twilio_creds').Credentials;
var client = new TwilioClient(creds.sid, creds.authToken, creds.hostname);

// keeps track of whether the phone object
// has been populated or not.
var initialized = false;
var phone = client.getPhoneNumber(creds.outgoing);
phone.setup(function() {
    // phone object has been populated
    initialized = true;
});

exports.send = function(number, message, callback) {
    // ignore request and throw if not initialized
    if (!initialized) {
        throw new Error("Patience! We are init'ing");
    }
    // otherwise process request and send SMS
    phone.sendSms(number, message, null, function(sms) {
        sms.on('processed', callback);
    });
};

Этот файл в основном идентиченчто у вас уже есть с одним принципиальным отличием.Он запоминает, был ли инициализирован объект phone или нет.Если он не был инициализирован, он просто выдает ошибку, если вызывается send.В противном случае продолжается отправка SMS.Вы можете стать более любопытным и создать очередь, в которой будут храниться все сообщения , которые будут отправлены до инициализации объекта, а затем отправит их все позже.

Это просто ленивый подход к началу работы.Чтобы использовать функцию (и), экспортированную вышеупомянутой оболочкой, просто включите ее в другой файл (ы) js.Функция send захватывает все необходимое (переменные initialized и phone) в замыкании, поэтому вам не нужно беспокоиться об экспорте каждой отдельной зависимости.Вот пример файла, в котором используется вышеуказанное.

app / mytwilio-test.js

var twilio = require("./mytwilio");

twilio.send("+123456789", "Hello there!", function(reqParams, response) {
    // do something absolutely crazy with the arguments
});

Если вы не хотите включать вполный / относительный путь mytwilio.js, затем добавьте его в список путей.Прочитайте подробнее о модульной системе и о том, как работает разрешение модулей в Node.JS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...