簡體   English   中英

如何在express.js應用程序中注冊異步中間件模塊?

[英]How to register async middleware module within express.js app?

我正在使用將node_acl模塊與MongoDB后端配合使用的快速應用程序。 我制作了一個模塊,該模塊創建node_acl的實例並對其進行異步配置。 該中間件應被稱為堆棧上的第二個中間件,以控制請求訪問。

// myModule.js

exports.init = function(callback) {
mongodb.connect("mongodb://localhost:27017/mydb", function(error, db) {
    var mongoBackend = new acl.mongodbBackend(db, 'acl_');
    acl = new acl(mongoBackend);    
    // Defining roles for acl 

    ....

    acl.addRoleParents('..', '..', function(err){
        if (err) callback(err, acl);
        acl.addRoleParents('..', '..', function(err){
            if (err) callback(err, acl);
            acl.addRoleParents('..', ['..','..'], function(err){
                if (err) {
                    callback(err, acl);
                } else {
                    callback(null, acl);
                };
            });
        });
    });
}); 
};

如何將該模塊注冊為堆棧的第二個中間件? 我需要以某種方式編輯myModule.js嗎?

感謝大伙們

該模塊已經提供了Express中間件 ,因此非常簡單:

// ...
var myModule = require('./myModule');

myModule.init(function(err, acl) {
  if (err) throw err;

  // insert first `app.use()` here

  app.use(acl.middleware());

  // insert other middleware/route handlers here
});

盡管我應該在您現有的代碼中注意兩點:

  • if (err) callback(err, acl); 應該更改為if (err) return callback(err); 以防止在調用回調后進一步執行。

  • if (error) return callback(error); 如果存在連接錯誤,則在mongodb.connect()回調內部缺少該mongodb.connect()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM