mongooseからmongoDBドライバーデータベースを取得します

alaboudi

私が設計しているモジュールは、mongodbインスタンスをパラメーターとして受け取るコンストラクター関数を提供します。私のアプリケーションでは、マングースを使用してこれをテストしようとしています。mongooseはmongoDBドライバーモジュール上に構築されているため、mongooseモジュールからdbドライバーオブジェクトを取得する方法があると思います。

失敗している機能がありますが、その理由がわかりません。

更新

以下は私のモジュールからのコードです

//authorizer.js
function Authorizer(mongoDBCon, userOptions){
    this.db = mongoDBCon;
    this.authorize = authorize;
    this.assignOwner = assignOwner;
    this.setUserPermission = setUserPermission;
    this.setRolePermission = setRolePermission;
    this.retrieveUserPermission = retrieveUserPermission;
    this.setRolePermission = setRolePermission;

    let defaultOptions = {
        unauthorizedHandler: (next)=>{
            let error = new Error('user has performed an unauthorized action');
            error.status = 401;
            next(error);
        },
        userAuthCollection: 'user_authorization',
        roleAuthCollection: 'role_authorization',

    }

    this.options = _.assign({},defaultOptions,userOptions);
}

function setRolePermission(role, resource, permissions) {
    let document = {
        role: role,
        resource: resource,
        permissions: permissions,
    };

    //add the document only if the role permission is not found
    let collection = this.db.collection(this.options.roleAuthCollection);
    collection.findOne(document)
        .then((result)=>console.log('in here')) //------> not printing :(
        .catch(e=>{console.log(e)});
}

構成するには、別のファイルにインポート/要求する必要があります

//authorizerConfig
let mongoose = require('mongoose');
let Authorizer = require('util/authorization/authorization');

let authorizer = new Authorizer(mongoose.connection.db);

//set admin role permissions
authorizer.setRolePermission('admin', 'users', '*');
authorizer.setRolePermission('admin', 'postings', '*');

module.exports = authorizer;

mongoに接続されたファイル

//app.js
// Set up and connect to MongoDB:
const mongoose = require('mongoose');
mongoose.Promise = Promise;
mongoose.connect(process.env.MONGODB_URI);//MONGODB_URI=localhost:27017/house_db

then()メソッドで表示したいと思っていたログが表示されなくなりました

  1. mongoose.connection.dbは、MongoClient.connectから返されるdbインスタンスと同等ですか?
  2. mongoClientはpromiseをサポートしていませんか?
  3. 私の問題を解決するのを手伝ってもらえますか?

回答: @NeilLunnから回答がありました。要約すると、mongoose.connection.dbは、MongoClient.connectから返されるdbと同等です。また、接続を確立する前にデータベースにクエリを実行していたため、エラーが発生しました。

ニール・ラン

MongoClientと基盤となるノードドライバーは確かにpromiseをサポートしています。実際に使用している方法が何であれ、正しい「データベースオブジェクト」を参照していないということです。

デモンストレーションとして:

const mongoose = require('mongoose'),
      Schema = mongoose.Schema;

mongoose.Promise = global.Promise;
mongoose.set('debug',true);

const uri = 'mongodb://localhost/other',    // connect to one database namespace
      options = { useMongoClient: true };

function log(data) {
  console.log(JSON.stringify(data,undefined,2))
}

(async function() {

  try {

    const conn = await mongoose.connect(uri,options);

    const testDb = conn.db.db('test');  // For example,  get "test" as a sibling

    let result = await testDb.collection('test').find().toArray();
    log(result);

  } catch(e) {
    console.error(e);
  } finally {
    mongoose.disconnect();
  }

})();

したがって、あなたが「すべき」ことは、接続から「接続」オブジェクトを取得しdbそこから参照することです。db現在の接続の「兄弟」スペースが必要になる可能性があり"admin"ます。特定のケースでは、「認証」の詳細を取得する必要があります。

しかし、ここでは、「名前付き兄弟」にアクセスするために.db()Dbオブジェクトのメソッドを使用しています。これは顕著ではないと同じように、非同期メソッド.collection()非同期ではありません。

そこからは、コアドライバーからそれぞれのオブジェクトにネイティブな他のメソッドを実装するだけです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Javaドライバーを介してMongoDBからすべてのデータベースを取得する正しい方法は何ですか

分類Dev

yii2はデータベースクラスからbatchinsertをオーバーライドします

分類Dev

winformでローカルデータベースを作成し、バックグラウンドでサーバーからデータを取得します

分類Dev

C#2.1ドライバーからMongoDBデータベース接続を適切にシャットダウンしますか?

分類Dev

ISODateで保存されたmongodbデータベースからタイムスタンプを取得します

分類Dev

mongoDBとphpドライバーマネージャーを使用してネストされたフィールドからデータを取得する

分類Dev

nodeJSドライバーを使用してMongoDBデータベースを操作するのはなぜですか?

分類Dev

MongooseがMongoDBデータベースからデータを取得できません

分類Dev

FullCalendarはデータベースからイベントを取得します

分類Dev

PHPはデータベースからレコードを取得します

分類Dev

SQLデータベースからランダムレコードを取得して表示します

分類Dev

Laravelのデータベースから爆縮した画像を取得してスライドに表示する方法

分類Dev

毎回オーバーライドせずに、mapDBデータベースからデータを取得するにはどうすればよいですか?

分類Dev

MongoDBから空のデータベースを削除します

分類Dev

mongooseを使用してMongoDBからデータを取得し、CSV / XLSXファイルを生成します

分類Dev

データベースからASP.NETグリッドビューにあるラベルフォントサイズをバインドします

分類Dev

Java-SQLデータベースからバイトを保存および/または取得します

分類Dev

ROMからデバイスドライバーを取得する

分類Dev

Mongo DB JAVAドライバーを使用してMongoDBのデータベースからコレクションを削除する方法

分類Dev

ストライプWebhookイベントからストライプデータを取得します

分類Dev

アンドロイドのsqliteデータベースから文字列、日付、時刻、整数を取得します

分類Dev

データベースからWebドライバーにURLを渡すときにエラーが発生しました

分類Dev

データベースから列名を取得します

分類Dev

mvcのデータベースからIDを取得します

分類Dev

Matlabデータベースから変数を取得します

分類Dev

TCPDF はデータベースから値を取得します

分類Dev

libpqを介してpostgresサーバーからデータベースのリストを取得します

分類Dev

データベースからデータを取得していますか?

分類Dev

AndroidのSQLiteデータベースからデータを取得しますか?

Related 関連記事

  1. 1

    Javaドライバーを介してMongoDBからすべてのデータベースを取得する正しい方法は何ですか

  2. 2

    yii2はデータベースクラスからbatchinsertをオーバーライドします

  3. 3

    winformでローカルデータベースを作成し、バックグラウンドでサーバーからデータを取得します

  4. 4

    C#2.1ドライバーからMongoDBデータベース接続を適切にシャットダウンしますか?

  5. 5

    ISODateで保存されたmongodbデータベースからタイムスタンプを取得します

  6. 6

    mongoDBとphpドライバーマネージャーを使用してネストされたフィールドからデータを取得する

  7. 7

    nodeJSドライバーを使用してMongoDBデータベースを操作するのはなぜですか?

  8. 8

    MongooseがMongoDBデータベースからデータを取得できません

  9. 9

    FullCalendarはデータベースからイベントを取得します

  10. 10

    PHPはデータベースからレコードを取得します

  11. 11

    SQLデータベースからランダムレコードを取得して表示します

  12. 12

    Laravelのデータベースから爆縮した画像を取得してスライドに表示する方法

  13. 13

    毎回オーバーライドせずに、mapDBデータベースからデータを取得するにはどうすればよいですか?

  14. 14

    MongoDBから空のデータベースを削除します

  15. 15

    mongooseを使用してMongoDBからデータを取得し、CSV / XLSXファイルを生成します

  16. 16

    データベースからASP.NETグリッドビューにあるラベルフォントサイズをバインドします

  17. 17

    Java-SQLデータベースからバイトを保存および/または取得します

  18. 18

    ROMからデバイスドライバーを取得する

  19. 19

    Mongo DB JAVAドライバーを使用してMongoDBのデータベースからコレクションを削除する方法

  20. 20

    ストライプWebhookイベントからストライプデータを取得します

  21. 21

    アンドロイドのsqliteデータベースから文字列、日付、時刻、整数を取得します

  22. 22

    データベースからWebドライバーにURLを渡すときにエラーが発生しました

  23. 23

    データベースから列名を取得します

  24. 24

    mvcのデータベースからIDを取得します

  25. 25

    Matlabデータベースから変数を取得します

  26. 26

    TCPDF はデータベースから値を取得します

  27. 27

    libpqを介してpostgresサーバーからデータベースのリストを取得します

  28. 28

    データベースからデータを取得していますか?

  29. 29

    AndroidのSQLiteデータベースからデータを取得しますか?

ホットタグ

アーカイブ