[英]Calling an async middleware inside of another async middleware in 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.