デフォルトの関数とプロパティのリストをエクスポートするモジュール(関数もあります)を記述したいと思います。 基本的には、このモジュールの意志は、この使用、消費者側が可能:Module.export 'default'関数
let db_connection = fake_database_connection_instance()
let db = require('./db.js')(db_connection)
db.find({id:1})
ので、デフォルトの機能はモジュールだけに、データベース接続のインスタンスを渡す必要があります。 これが機能していないコード
module.exports = {
//init should go away and replaced by a 'default' function when this module is called
init: function (connection) {
this.connection= connection;
return this;
},
find: function (query) {
return new Promise(function (resolve, reject) {
this.connection.find(query, function (err, docs) {
if (err) {
return reject(err);
}
return resolve(docs);
});
});
}
}
である私はnew
キーワード(消費者側)を避けたいので、私は私が知っているものをthis
を、削除する必要があります。ここでの問題は、require('./db.js')()
とその他の関数で呼び出されるデフォルト関数をエクスポートする方法2:
require('./db.js').find()
?- 接続インスタンスをデフォルト関数から
find()
に渡すにはどうすればよいですか?
EDIT @Igor Raush ES6クラスのソリューション、次の私はこれを書いたが、それでもdb is not defined
class DB {
constructor(db) {
this.db = db;
}
find(query) {
return new Promise((resolve, reject) => {
this.db.find(query, function (err, docs) {
if (err) {
return reject(err);
}
return resolve(docs);
});
});
}
}
更新されたコードでは、 'this' **は' Promise'関数によって作成されたスコープに対して** DBのインスタンスではなく**参照されます。別のスコープで使用するには 'DB.this'を覚えておく必要があります。 – alexmac
それはあまり「上品ではない」(OOPの意味で:))。とにかくありがとうと – alfredopacino
はい、構文的な砂糖をES6に追加しても、それはちょうどjavascript :) – alexmac