私はnodejs/expressjsとmongodbを初めて使用しています。私は、Ionicフレームワークを使用して構築しようとしているモバイルアプリケーションにデータを公開するAPIを作成しようとしています。NodeJS/ExpressJSのルータコールバックに約束を返す方法
私はMongoDBのデータを読み込み、私のモデルで機能を持っているこの
router.get('/api/jobs', (req, res) => {
JobModel.getAllJobsAsync().then((jobs) => res.json(jobs)); //IS THIS THe CORRECT WAY?
});
のようなルートを設定しています。私は、私のモデル関数を約束を返すように変換するBluebird約束ライブラリを使用しています。モデルで
const JobModel = Promise.promisifyAll(require('../models/Job'));
My機能
static getAllJobs(cb) {
MongoClient.connectAsync(utils.getConnectionString()).then((db) => {
const jobs = db.collection('jobs');
jobs.find().toArray((err, jobs) => {
if(err) {
return cb(err);
}
return cb(null, jobs);
});
});
}
promisifyAll(MyModuleという)は約束を返すために、この機能を変換します。これは私のモデルからのルートコールバック関数にデータを返すための正しいアプローチであるならば、私はわからない何
は、
- のですか?
- これは効率的ですか?
- promisifyAllの使用は遅いですか?これはモジュール内のすべての関数をループし、Asyncを接尾辞として使用して将来の約束を返す関数のコピーを作成するためです。それは実際にいつ実行されますか?これはノードrequireステートメントに関連するより一般的な質問です。次のポイントを参照してください。
- すべてのrequire文はいつ実行されますか? nodejsサーバーを起動するとどうなりますか?または私がAPIを呼び出すと?
モンゴースモジュールを見てください。 – Yahya
@Yahya私はそれについて研究していました。しかし、私は自分の文書にスキーマを強制したくありません。 – jerry
[Monk](https://automattic.github.io/monk/)はどうですか? – Yahya