2016-08-07 11 views
0

Ich versuche, ACL in meiner Node.js-Anwendung zu verwenden.TypeError: acl.middleware() ist keine Funktion

Mit acl Modul, ich habe den folgenden Code:

var express = require('express'), 
    logger = require('morgan'), 
    mongoose = require('mongoose'), 
    Acl = require('acl'); 

var app = express(); 

app.set('port', 8000); 

mongoose.connect('mongodb://localhost:27017/test', function() { 
    console.log('Mongodb connection connected'); 

    var acl = new Acl(new Acl.mongodbBackend(mongoose.connection.db, 'acl_'), logger()); 

    acl.allow([ 
     { 
      roles: ['guest'], 
      allows: [ 
       { resources: '/test', permissions: 'get' } 
      ], 
     } 
    ]); 

    console.log('acl.middleware is a ', typeof acl.middleware); 

    app.get('/test', acl.middlemare(), function (req, res) { 

    }); 

    app.get('/unauthorized', acl.middlemare(), function (req, res) { 

    }); 
}); 

app.listen(app.get('port'), function() { 
    console.log('Express server listening on port %d', app.get('port')); 
}); 

Wenn ich den Server zu starten, erhalte ich die folgende Ausgabe:

Express server listening on port 8000 
Mongodb connection connected 
acl.middleware is a function 
TypeError: acl.middleware() is not a function 
... 

Edit: Nach einem Logger platzieren, I Bin ein gegeben: Error: Broke parameter contract

Ich kann nicht herausfinden, was ich falsch mache.

Ich habe mir diese verwandte answer angesehen, aber immer noch kein Glück, es zur Arbeit zu bringen.

Gibt es noch etwas, das ich vermisse?

+1

Entweder Ihr Code oder die Fehlermeldung ist nicht das, was Sie tatsächlich in der Realität haben. 'middle mare'! =' middleware' – str

Antwort

1

Es ist acl.middleware() nicht acl.middlemare() (w vs. m).

+0

Jeez, ich bin ein Idiot. – Mikey

0

Sie müssen Promise verwenden, um die Instantiierung der ACL zu verzögern, bis Express vollständig initialisiert wurde.

isMongoDBConnected = new Promise((resolve, reject) => { 
    MongoClient.connect(mongoDBUrl, (e, db) => { 
     if (e) { 
      reject(e); 
     } else { 

      var mongoBackend = new NodeAcl.mongodbBackend(db /*, {String} prefix */); 
      acl = new NodeAcl(mongoBackend, logger); 

      defineRoles(acl); 
      resolve(true); 
     } 
    }); 
});