エクスポート可能なオブジェクトまたはモジュールを作成して、commonjs/nodejs javascriptを使用してサードパーティライブラリをラップする

StackOverflow https://stackoverflow.com/questions/5812228

質問

私はJavaScriptとクラス/オブジェクトの作成を初めて使用しています。ルートで使用するためのいくつかの簡単な方法で、オープンソースライブラリのコードをラップしようとしています。

以下のコードがあります。 ソース (Sjwalter's Github Repo;図書館をStephenに感謝します!)。

このようなものでファイル/モジュールをメインアプリ/server.jsファイルにエクスポートしようとしています。

var twilio = require('nameOfMyTwilioLibraryModule');

またはそれが何であれ、私がする必要があります。

次のような方法を作成したいと思っています twilio.send(number, message)コードをモジュラーに保つために、ルートで簡単に使用できること。私はいくつかのさまざまな方法を試しましたが、何も機能しませんでした。ライブラリがどのように機能するかを知る必要があるため、これは大きな質問ではないかもしれません。 var phone = client.getPhoneNumber(creds.outgoing); Lineは、私の発信番号が登録済み/支払額であることを確認します。

これは、私が自分の方法で包み込もうとしている完全な例です。

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);
            }
        });
    });
}

});`

役に立ちましたか?

解決

のプロパティとして公開する関数を追加するだけです 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);
    });
};

このファイルは、1つの重要な違いを持つ既に持っているものとほとんど同じです。それは phone オブジェクトは初期化されているかどうかです。初期化されていない場合、単にエラーをスローするだけです send 呼ばれています。それ以外の場合は、SMSの送信に進みます。あなたはよりファンシーになり、すべてのメッセージを保存するキューを作成することができます することが オブジェクトが初期化されるまで送信され、後ですべてを送信します。

これはあなたを始めるための怠zyなアプローチです。上記のラッパーによってエクスポートされる関数を使用するには、単に他のJSファイルを含めるだけです。 send 関数は、必要なすべてをキャプチャします(initializedphone 変数)閉鎖中、すべての依存関係をエクスポートすることを心配する必要はありません。上記を使用するファイルの例を次に示します。

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でモジュール解像度の仕組みについて

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top